| @@ -3,6 +3,8 @@ package controller | |||||
| import ( | import ( | ||||
| "encoding/json" | "encoding/json" | ||||
| "net/http" | "net/http" | ||||
| "strconv" | |||||
| "time" | |||||
| "github.com/AFASystems/presence/internal/pkg/model" | "github.com/AFASystems/presence/internal/pkg/model" | ||||
| "github.com/gorilla/mux" | "github.com/gorilla/mux" | ||||
| @@ -13,7 +15,26 @@ func TracksListController(db *gorm.DB) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | return func(w http.ResponseWriter, r *http.Request) { | ||||
| id := mux.Vars(r)["id"] | id := mux.Vars(r)["id"] | ||||
| var tracks []model.Tracks | 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) | res, err := json.Marshal(tracks) | ||||
| if err != nil { | if err != nil { | ||||
| http.Error(w, err.Error(), 400) | http.Error(w, err.Error(), 400) | ||||