fetch.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package server
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strconv"
  6. "github.com/felamaslen/go-music-player/pkg/database"
  7. "github.com/felamaslen/go-music-player/pkg/logger"
  8. "github.com/felamaslen/go-music-player/pkg/repository"
  9. "github.com/felamaslen/go-music-player/pkg/services"
  10. "github.com/go-redis/redis/v7"
  11. )
  12. type ArtistsResponse struct {
  13. Artists []string `json:"artists"`
  14. More bool `json:"more"`
  15. }
  16. func routeFetchArtists(l *logger.Logger, rdb *redis.Client, w http.ResponseWriter, r *http.Request) error {
  17. limit, err := strconv.Atoi(r.URL.Query().Get("limit"))
  18. if err != nil {
  19. http.Error(w, "Limit must be an integer", http.StatusBadRequest)
  20. return nil
  21. }
  22. if limit < 1 || limit > 1000 {
  23. http.Error(w, "Limit must be between 1 and 1000", http.StatusBadRequest)
  24. return nil
  25. }
  26. page, err := strconv.Atoi(r.URL.Query().Get("page"))
  27. if err != nil {
  28. http.Error(w, "Page must be an integer", http.StatusBadRequest)
  29. return nil
  30. }
  31. if page < 0 {
  32. http.Error(w, "Page must be non-negative", http.StatusBadRequest)
  33. return nil
  34. }
  35. artists, more := services.GetArtists(limit, page)
  36. response, err := json.Marshal(ArtistsResponse{
  37. Artists: *artists,
  38. More: more,
  39. })
  40. if err != nil {
  41. return err
  42. }
  43. w.Write(response)
  44. return nil
  45. }
  46. type AlbumsResponse struct {
  47. Artist string `json:"artist"`
  48. Albums []string `json:"albums"`
  49. }
  50. func routeFetchAlbums(l *logger.Logger, rdb *redis.Client, w http.ResponseWriter, r *http.Request) error {
  51. artist := r.URL.Query().Get("artist")
  52. db := database.GetConnection()
  53. albums, err := repository.SelectAlbumsByArtist(db, artist)
  54. if err != nil {
  55. return err
  56. }
  57. response, err := json.Marshal(AlbumsResponse{
  58. Artist: artist,
  59. Albums: *albums,
  60. })
  61. if err != nil {
  62. return err
  63. }
  64. w.Write(response)
  65. return nil
  66. }