Просмотр исходного кода

feat: route to fetch song info by ID

Fela Maslen 5 лет назад
Родитель
Сommit
b74159c56f
2 измененных файлов с 41 добавлено и 0 удалено
  1. 39 0
      music-player/pkg/server/fetch.go
  2. 2 0
      music-player/pkg/server/server.go

+ 39 - 0
music-player/pkg/server/fetch.go

@@ -106,3 +106,42 @@ func routeFetchSongs(l *logger.Logger, rdb *redis.Client, w http.ResponseWriter,
   w.Write(response)
   w.Write(response)
   return nil
   return nil
 }
 }
+
+func routeFetchSongInfo(l *logger.Logger, rdb *redis.Client, w http.ResponseWriter, r *http.Request) error {
+  idRaw := r.URL.Query().Get("id")
+  idInt, err := strconv.Atoi(idRaw)
+  if err != nil {
+    http.Error(w, "Must provide a valid id", http.StatusBadRequest)
+    return nil
+  }
+  if idInt < 1 {
+    http.Error(w, "id must be non-negative", http.StatusBadRequest)
+    return nil
+  }
+
+  db := database.GetConnection()
+
+  song, err := repository.SelectSong(db, idInt)
+  if err != nil {
+    if err.Error() == "No such ID" {
+      http.Error(w, "Song not found", http.StatusNotFound)
+      return nil
+    }
+    return err
+  }
+
+  response, err := json.Marshal(read.SongExternal{
+    Id: idInt,
+    TrackNumber: song.TrackNumber,
+    Title: song.Title,
+    Artist: song.Artist,
+    Album: song.Album,
+    Duration: song.Duration,
+  })
+  if err != nil {
+    return err
+  }
+
+  w.Write(response)
+  return nil
+}

+ 2 - 0
music-player/pkg/server/server.go

@@ -29,6 +29,8 @@ func StartServer() {
   router.Path("/albums").Methods("GET").HandlerFunc(routeHandler(l, rdb, routeFetchAlbums))
   router.Path("/albums").Methods("GET").HandlerFunc(routeHandler(l, rdb, routeFetchAlbums))
   router.Path("/songs").Methods("GET").HandlerFunc(routeHandler(l, rdb, routeFetchSongs))
   router.Path("/songs").Methods("GET").HandlerFunc(routeHandler(l, rdb, routeFetchSongs))
 
 
+  router.Path("/song-info").Methods("GET").HandlerFunc(routeHandler(l, rdb, routeFetchSongInfo))
+
   port := conf.Port
   port := conf.Port
 
 
   handler := cors.AllowAll().Handler(router)
   handler := cors.AllowAll().Handler(router)