package controller import ( "context" "net/http" "strconv" "time" "github.com/AFASystems/presence/internal/pkg/api/response" "github.com/AFASystems/presence/internal/pkg/model" "github.com/gorilla/mux" "gorm.io/gorm" ) func TracksListController(db *gorm.DB, context context.Context) 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()) if err := db.WithContext(context).Where("uuid = ? AND timestamp BETWEEN ? AND ?", id, from, to).Order("timestamp DESC").Limit(limit).Find(&tracks).Error; err != nil { response.InternalError(w, "failed to list tracks", err) return } response.JSON(w, http.StatusOK, tracks) } }