fathom/pkg/api/params.go

65 lines
1.3 KiB
Go
Raw Normal View History

package api
import (
2016-12-11 13:50:01 +00:00
"net/http"
"strconv"
2016-12-11 14:33:23 +00:00
"strings"
2016-12-11 13:50:01 +00:00
"time"
"github.com/gorilla/mux"
)
2018-05-08 07:11:32 +00:00
// Params defines the commonly used API parameters
2018-05-07 16:59:52 +00:00
type Params struct {
SiteID int64
Limit int64
2018-05-07 16:59:52 +00:00
StartDate time.Time
EndDate time.Time
}
2018-05-08 07:11:32 +00:00
// GetRequestParams parses the query parameters and returns commonly used API parameters, with defaults
2018-05-07 16:59:52 +00:00
func GetRequestParams(r *http.Request) *Params {
params := &Params{
SiteID: 0,
2018-05-07 16:59:52 +00:00
Limit: 20,
StartDate: time.Now(),
EndDate: time.Now().AddDate(0, 0, -7),
2016-12-11 13:50:01 +00: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 16:59:52 +00:00
q := r.URL.Query()
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 16:59:52 +00: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 13:50:01 +00: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 13:50:01 +00:00
}
2018-05-07 16:59:52 +00:00
return params
}
2016-12-11 14:33:23 +00:00
func parseMajorMinor(v string) string {
parts := strings.SplitN(v, ".", 3)
if len(parts) > 1 {
v = parts[0] + "." + parts[1]
}
return v
}