fetch.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package server
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strconv"
  6. "github.com/felamaslen/go-music-player/pkg/logger"
  7. "github.com/felamaslen/go-music-player/pkg/services"
  8. "github.com/go-redis/redis/v7"
  9. )
  10. type ArtistsResponse struct {
  11. Artists []string `json:"artists"`
  12. More bool `json:"more"`
  13. }
  14. func routeFetchArtists(l *logger.Logger, rdb *redis.Client, w http.ResponseWriter, r *http.Request) error {
  15. limit, err := strconv.Atoi(r.URL.Query().Get("limit"))
  16. if err != nil {
  17. http.Error(w, "Limit must be an integer", http.StatusBadRequest)
  18. return nil
  19. }
  20. if limit < 1 || limit > 1000 {
  21. http.Error(w, "Limit must be between 1 and 1000", http.StatusBadRequest)
  22. return nil
  23. }
  24. page, err := strconv.Atoi(r.URL.Query().Get("page"))
  25. if err != nil {
  26. http.Error(w, "Page must be an integer", http.StatusBadRequest)
  27. return nil
  28. }
  29. if page < 0 {
  30. http.Error(w, "Page must be non-negative", http.StatusBadRequest)
  31. return nil
  32. }
  33. artists, more := services.GetArtists(limit, page)
  34. response, err := json.Marshal(ArtistsResponse{
  35. Artists: *artists,
  36. More: more,
  37. })
  38. if err != nil {
  39. return err
  40. }
  41. w.Write(response)
  42. return nil
  43. }