package controller import ( "encoding/json" "net/http" "strconv" "time" "github.com/AFASystems/presence/internal/pkg/model" "github.com/gorilla/mux" "gorm.io/gorm" ) func TracksListController(db *gorm.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { id := mux.Vars(r)["id"] var tracks []model.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) return } w.Write(res) } }