Pārlūkot izejas kodu

feat: route to fetch a shuffled song

Fela Maslen 4 gadi atpakaļ
vecāks
revīzija
3fb3ebc666
2 mainītis faili ar 28 papildinājumiem un 4 dzēšanām
  1. 26 4
      gmus-backend/pkg/server/fetch.go
  2. 2 0
      gmus-backend/pkg/server/server.go

+ 26 - 4
gmus-backend/pkg/server/fetch.go

@@ -10,7 +10,6 @@ import (
 	"github.com/felamaslen/gmus-backend/pkg/repository"
 	"github.com/felamaslen/gmus-backend/pkg/types"
 	"github.com/go-redis/redis"
-	"github.com/jmoiron/sqlx"
 )
 
 type ArtistsResponse struct {
@@ -206,7 +205,7 @@ type NullResponse struct {
 	Id int `json:"id"`
 }
 
-func respondWithSongOrNull(db *sqlx.DB, w http.ResponseWriter, song *types.Song) error {
+func respondWithSongOrNull(w http.ResponseWriter, song *types.Song) error {
 	if song.Id == 0 {
 		response, _ := json.Marshal(NullResponse{})
 		w.Write(response)
@@ -242,7 +241,7 @@ func routeFetchNextSong(l *logger.Logger, rdb redis.Cmdable, w http.ResponseWrit
 		return err
 	}
 
-	if err := respondWithSongOrNull(db, w, nextSong); err != nil {
+	if err := respondWithSongOrNull(w, nextSong); err != nil {
 		return err
 	}
 	return nil
@@ -260,7 +259,30 @@ func routeFetchPrevSong(l *logger.Logger, rdb redis.Cmdable, w http.ResponseWrit
 		return err
 	}
 
-	if err := respondWithSongOrNull(db, w, prevSong); err != nil {
+	if err := respondWithSongOrNull(w, prevSong); err != nil {
+		return err
+	}
+	return nil
+}
+
+func routeFetchShuffledSong(l *logger.Logger, rdb redis.Cmdable, w http.ResponseWriter, r *http.Request) error {
+	idRaw := r.URL.Query().Get("current-song-id")
+	id, err := strconv.Atoi(idRaw)
+	db := database.GetConnection()
+
+	var song *types.Song
+
+	if err != nil || id < 1 {
+		// No (valid) song ID passed; fetch any random song
+		song, err = repository.GetShuffledSong(db, nil)
+	} else {
+		song, err = repository.GetShuffledSong(db, &id)
+	}
+
+	if err != nil {
+		return err
+	}
+	if err = respondWithSongOrNull(w, song); err != nil {
 		return err
 	}
 	return nil

+ 2 - 0
gmus-backend/pkg/server/server.go

@@ -55,5 +55,7 @@ func StartServer() {
 	server.router.Path("/next-song").Methods("GET").HandlerFunc(routeHandler(l, rdb, routeFetchNextSong))
 	server.router.Path("/prev-song").Methods("GET").HandlerFunc(routeHandler(l, rdb, routeFetchPrevSong))
 
+	server.router.Path("/shuffle-song").Methods("GET").HandlerFunc(routeHandler(l, rdb, routeFetchShuffledSong))
+
 	server.Listen()
 }