2016-11-21 16:01:14 +01:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
2016-12-11 14:50:01 +01:00
|
|
|
"net/http"
|
|
|
|
"strconv"
|
2016-12-11 15:33:23 +01:00
|
|
|
"strings"
|
2016-12-11 14:50:01 +01:00
|
|
|
"time"
|
2018-10-05 13:09:58 +02:00
|
|
|
|
|
|
|
"github.com/gorilla/mux"
|
2016-11-21 16:01:14 +01:00
|
|
|
)
|
|
|
|
|
2018-05-08 09:11:32 +02:00
|
|
|
// Params defines the commonly used API parameters
|
2018-05-07 18:59:52 +02:00
|
|
|
type Params struct {
|
2018-10-05 13:09:58 +02:00
|
|
|
SiteID int64
|
|
|
|
Limit int64
|
2018-05-07 18:59:52 +02:00
|
|
|
StartDate time.Time
|
|
|
|
EndDate time.Time
|
|
|
|
}
|
2016-11-24 13:55:59 +01:00
|
|
|
|
2018-05-08 09:11:32 +02:00
|
|
|
// GetRequestParams parses the query parameters and returns commonly used API parameters, with defaults
|
2018-05-07 18:59:52 +02:00
|
|
|
func GetRequestParams(r *http.Request) *Params {
|
|
|
|
params := &Params{
|
2018-10-05 13:09:58 +02:00
|
|
|
SiteID: 0,
|
2018-05-07 18:59:52 +02:00
|
|
|
Limit: 20,
|
|
|
|
StartDate: time.Now(),
|
|
|
|
EndDate: time.Now().AddDate(0, 0, -7),
|
2016-12-11 14:50:01 +01:00
|
|
|
}
|
2016-11-26 15:39:29 +01:00
|
|
|
|
2018-10-05 13:09:58 +02:00
|
|
|
vars := mux.Vars(r)
|
|
|
|
if _, ok := vars["id"]; ok {
|
|
|
|
if siteID, err := strconv.ParseInt(vars["id"], 10, 64); err == nil {
|
|
|
|
params.SiteID = siteID
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-07 18:59:52 +02:00
|
|
|
q := r.URL.Query()
|
2018-10-05 13:09:58 +02:00
|
|
|
if q.Get("after") != "" {
|
|
|
|
if after, err := strconv.ParseInt(q.Get("after"), 10, 64); err == nil && after > 0 {
|
|
|
|
params.StartDate = time.Unix(after, 0)
|
|
|
|
}
|
2018-05-07 18:59:52 +02:00
|
|
|
}
|
2016-11-26 17:19:15 +01:00
|
|
|
|
2018-10-05 13:09:58 +02:00
|
|
|
if q.Get("before") != "" {
|
|
|
|
if before, err := strconv.ParseInt(q.Get("before"), 10, 64); err == nil && before > 0 {
|
|
|
|
params.EndDate = time.Unix(before, 0)
|
|
|
|
}
|
2016-12-11 14:50:01 +01:00
|
|
|
}
|
2016-11-26 17:19:15 +01:00
|
|
|
|
2018-10-05 13:09:58 +02:00
|
|
|
if q.Get("limit") != "" {
|
|
|
|
if limit, err := strconv.ParseInt(q.Get("limit"), 10, 64); err == nil && limit > 0 {
|
|
|
|
params.Limit = limit
|
|
|
|
}
|
2016-12-11 14:50:01 +01:00
|
|
|
}
|
2016-11-26 17:19:15 +01:00
|
|
|
|
2018-05-07 18:59:52 +02:00
|
|
|
return params
|
2016-11-24 14:18:40 +01:00
|
|
|
}
|
2016-12-11 15:33:23 +01:00
|
|
|
|
|
|
|
func parseMajorMinor(v string) string {
|
|
|
|
parts := strings.SplitN(v, ".", 3)
|
|
|
|
if len(parts) > 1 {
|
|
|
|
v = parts[0] + "." + parts[1]
|
|
|
|
}
|
|
|
|
return v
|
|
|
|
}
|