You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

47 lines
989 B

  1. package controller
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strconv"
  6. "time"
  7. "github.com/AFASystems/presence/internal/pkg/model"
  8. "github.com/gorilla/mux"
  9. "gorm.io/gorm"
  10. )
  11. func TracksListController(db *gorm.DB) http.HandlerFunc {
  12. return func(w http.ResponseWriter, r *http.Request) {
  13. id := mux.Vars(r)["id"]
  14. var tracks []model.Tracks
  15. query := r.URL.Query()
  16. lStr := query.Get("limit")
  17. parseTime := func(key string, defaultTime time.Time) time.Time {
  18. t, err := time.Parse(time.RFC3339, query.Get(key))
  19. if err != nil {
  20. return defaultTime
  21. }
  22. return t
  23. }
  24. limit, _ := strconv.Atoi(lStr)
  25. if limit == 0 {
  26. limit = 10
  27. }
  28. from := parseTime("from", time.Now().AddDate(0, 0, -1))
  29. to := parseTime("to", time.Now())
  30. db.Where("uuid = ? AND timestamp BETWEEN ? AND ?", id, from, to).Order("timestamp DESC").Limit(limit).Find(&tracks)
  31. res, err := json.Marshal(tracks)
  32. if err != nil {
  33. http.Error(w, err.Error(), 400)
  34. return
  35. }
  36. w.Write(res)
  37. }
  38. }