diff --git a/internal/pkg/controller/tracks_controller.go b/internal/pkg/controller/tracks_controller.go index 1e086bd..0664540 100644 --- a/internal/pkg/controller/tracks_controller.go +++ b/internal/pkg/controller/tracks_controller.go @@ -3,6 +3,8 @@ package controller import ( "encoding/json" "net/http" + "strconv" + "time" "github.com/AFASystems/presence/internal/pkg/model" "github.com/gorilla/mux" @@ -13,7 +15,26 @@ func TracksListController(db *gorm.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { id := mux.Vars(r)["id"] var tracks []model.Tracks - db.Where("uuid = ?", id).Order("timestamp DESC").Limit(100).Find(&tracks) + + query := r.URL.Query() + lStr := query.Get("limit") + + parseTime := func(key string, defaultTime time.Time) time.Time { + t, err := time.Parse(time.RFC3339, query.Get(key)) + if err != nil { + return defaultTime + } + return t + } + + limit, _ := strconv.Atoi(lStr) + if limit == 0 { + limit = 10 + } + from := parseTime("from", time.Now().AddDate(0, 0, -1)) + to := parseTime("to", time.Now()) + + db.Where("uuid = ? AND timestamp BETWEEN ? AND ?", id, from, to).Order("timestamp DESC").Limit(limit).Find(&tracks) res, err := json.Marshal(tracks) if err != nil { http.Error(w, err.Error(), 400)