]> git.example.dev Git - binbsis50-sm.git/commitdiff
updated: testing, another thing added, not done tho
author2weiEmu <saalbach.robert@outlook.de>
Wed, 15 Apr 2026 22:21:19 +0000 (00:21 +0200)
committer2weiEmu <saalbach.robert@outlook.de>
Wed, 15 Apr 2026 22:21:19 +0000 (00:21 +0200)
Makefile
pkg/dbhandling/dbhandling.go
pkg/dbhandling/songsapi.go
pkg/dbhandling/songsapi_test.go

index c9c19f74763b8c011e5123b525f1f3fee100f1fc..283906dd85cfa1aecbed6683e78f65e8ff4bf5ea 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -18,3 +18,5 @@ test:
 
        python3 ./testing/dummy_testing_data.py
        go test -v ./...
+
+       sudo docker stop redis
index f9c6028c5a973690a51ba4dd30397bce26fbb7a6..334ecbea017bb16f725b359480571d4a6903d8d9 100644 (file)
@@ -40,7 +40,7 @@ type DBStatusMessage struct {
 
 type DBWrapper struct {
        RedisDb *redis.Client
-       ctx context.Context
+       Ctx context.Context
        PathToSongs string
 }
 
@@ -69,7 +69,7 @@ func (dbw *DBWrapper) UpdateSongStats(w http.ResponseWriter, r *http.Request) {
                panic(err)
        }
 
-       _, err = dbw.RedisDb.HMSet(dbw.ctx, changeSong.Key, map[string]interface{}{
+       _, err = dbw.RedisDb.HMSet(dbw.Ctx, changeSong.Key, map[string]interface{}{
                "artistName": changeSong.ArtistName,
                "trackName": changeSong.TrackName,
                "trackViewUrl": changeSong.TrackViewURL,
@@ -99,7 +99,7 @@ func (dbw *DBWrapper) UpdateSongsFilename(w http.ResponseWriter, r *http.Request
                panic(err)
        }
 
-       intf, err := dbw.RedisDb.HMGet(dbw.ctx, changeFilename.Key, "previewUrl").Result()
+       intf, err := dbw.RedisDb.HMGet(dbw.Ctx, changeFilename.Key, "previewUrl").Result()
        if err != nil {
                panic(err)
        }
@@ -112,7 +112,7 @@ func (dbw *DBWrapper) UpdateSongsFilename(w http.ResponseWriter, r *http.Request
                panic(err)
        }
 
-       _, err = dbw.RedisDb.HMSet(dbw.ctx, changeFilename.Key, map[string]interface{}{
+       _, err = dbw.RedisDb.HMSet(dbw.Ctx, changeFilename.Key, map[string]interface{}{
                "previewUrl": changeFilename.NewFilename,
        }).Result()
        if err != nil {
@@ -128,7 +128,7 @@ func (dbw *DBWrapper) GetDBStatus(w http.ResponseWriter, r *http.Request) {
                return
        }
 
-       keys, err := dbw.RedisDb.Keys(dbw.ctx, "song:*").Result()
+       keys, err := dbw.RedisDb.Keys(dbw.Ctx, "song:*").Result()
        if err != nil {
                panic(err)
        }
@@ -139,18 +139,18 @@ func (dbw *DBWrapper) GetDBStatus(w http.ResponseWriter, r *http.Request) {
        // way to get room information in the first place but it will have to do
        allRooms := make([]DBRoom, 0)
 
-       all_keys, _, err := dbw.RedisDb.Scan(dbw.ctx, 0, "*", int64(key_count)).Result()
+       all_keys, _, err := dbw.RedisDb.Scan(dbw.Ctx, 0, "*", int64(key_count)).Result()
        if err != nil {
                panic(err)
        }
        for _, k := range all_keys {
-               t, err := dbw.RedisDb.Type(dbw.ctx, k).Result()
+               t, err := dbw.RedisDb.Type(dbw.Ctx, k).Result()
                if err != nil {
                        panic(err)
                }
                
                if t == "zset" {
-                       assignedIds, err := dbw.RedisDb.ZRange(dbw.ctx, k, 0, -1).Result()
+                       assignedIds, err := dbw.RedisDb.ZRange(dbw.Ctx, k, 0, -1).Result()
                        if err != nil {
                                panic(err)
                        }
@@ -168,7 +168,7 @@ func (dbw *DBWrapper) GetDBStatus(w http.ResponseWriter, r *http.Request) {
        // the database unless there ends up being significant performance implications
        allSongs := make([]DBSong, key_count)
        for i, k := range keys {
-               intf, err := dbw.RedisDb.HMGet(dbw.ctx, k, "artistName", "trackName", "trackViewUrl", "previewUrl", "artworkUrl60", "artworkUrl100", "displayArtistNames", "displayTrackName").Result()
+               intf, err := dbw.RedisDb.HMGet(dbw.Ctx, k, "artistName", "trackName", "trackViewUrl", "previewUrl", "artworkUrl60", "artworkUrl100", "displayArtistNames", "displayTrackName").Result()
                if err != nil {
                        panic(err)
                }
index a2e5d494817cee9a9373787dd8cc1129e6db796a..552a06678690100f64b20a4f56d5b28bf5660c56 100644 (file)
@@ -3,15 +3,27 @@ package dbhandling
 import (
        "encoding/json"
        "net/http"
+       "strconv"
 )
 
+/** TEST
+ * An internal method to get the total number of songs as that is just something we need sometimes
+ **/
+func (dbw *DBWrapper) getSongCount() (int, error) {
+       keys, err := dbw.RedisDb.Keys(dbw.Ctx, "song:*").Result()
+       if err != nil {
+               return -1, err
+       }
+       return len(keys), nil
+}
+
 /**
  * Get all songs, and all their assosciated information from the db
  **/
 func (dbw *DBWrapper) SongsGet(w http.ResponseWriter, r *http.Request) {
        // Here we should return an entire list of songs
 
-       keys, err := dbw.RedisDb.Keys(dbw.ctx, "song:*").Result()
+       keys, err := dbw.RedisDb.Keys(dbw.Ctx, "song:*").Result()
        if err != nil {
                w.WriteHeader(http.StatusInternalServerError)
                return
@@ -20,7 +32,7 @@ func (dbw *DBWrapper) SongsGet(w http.ResponseWriter, r *http.Request) {
 
        allSongs := make([]DBSong, key_count)
        for i, k := range keys {
-               intf, err := dbw.RedisDb.HMGet(dbw.ctx, k, "artistName", "trackName", "trackViewUrl", "previewUrl", "artworkUrl60", "artworkUrl100", "displayArtistNames", "displayTrackName").Result()
+               intf, err := dbw.RedisDb.HMGet(dbw.Ctx, k, "artistName", "trackName", "trackViewUrl", "previewUrl", "artworkUrl60", "artworkUrl100", "displayArtistNames", "displayTrackName").Result()
                if err != nil {
                        w.WriteHeader(http.StatusInternalServerError)
                        return
@@ -49,10 +61,37 @@ func (dbw *DBWrapper) SongsGet(w http.ResponseWriter, r *http.Request) {
 
 }
 
-/** TODO
+/**
  * Create a new song in the database (only in the main list don't add to anything)
  **/
 func (dbw *DBWrapper) SongsCreate(w http.ResponseWriter, r *http.Request) {
+       count, err := dbw.getSongCount()
+       if err != nil {
+               w.WriteHeader(http.StatusInternalServerError)
+               return
+       }
+
+       newSong := DBSong{}
+       err = json.NewDecoder(r.Body).Decode(&newSong)
+
+       cmd := dbw.RedisDb.HSet(dbw.Ctx, "song:" + strconv.Itoa(count + 1),
+               "artistName", newSong.ArtistName,
+               "trackName", newSong.TrackName,
+               "trackViewUrl", newSong.TrackViewURL,
+               "previewUrl", newSong.PreviewURL,
+               "artworkUrl60", newSong.ArtworkURL60,
+               "artworkUrl100", newSong.ArtworkURL100,
+               "displayArtistNames", newSong.DisplayArtistNames,
+               "displayTrackName", newSong.DisplayTrackName,
+               )
+
+       _, err = cmd.Result()
+       if err != nil {
+               w.WriteHeader(http.StatusInternalServerError)
+               return
+       }
+
+       w.WriteHeader(http.StatusOK)
 }
 
 /** TODO
index 78a0937cacd04de54d1e791a91ec4958623ac58f..7108c428f3360bda078ddc3ab785adbd6ee6d7c3 100644 (file)
@@ -13,6 +13,33 @@ func (r *EmptyReader) Read(p []byte) (int, error) {
        return 0, nil
 }
 
+var songCreateData = dbhandling.DBSong{
+       ArtistName: "CreateTestArtistName",
+       TrackName: "CreateTestTrackName",
+       TrackViewURL: "CreateTestTrackView",
+       PreviewURL: "CreateTestPreviewUrl",
+       ArtworkURL60: "CreateTestArtworkUrl60",
+       ArtworkURL100: "CreateTestAtworkUrl100",
+       DisplayArtistNames: "CreateTestDisplayArtistNames",
+       DisplayTrackName: "CreateTestDisplayTrackName",
+}
+
+type CreateReader struct {}
+
+func (c *CreateReader) Read(p []byte) (int, error) {
+       bin, err := json.Marshal(songCreateData)
+       if err != nil {
+               return 0, err
+       }
+
+       if len(bin) > len(p) {
+               return 0, err
+       }
+
+       count := copy(p, bin)
+       return count, nil
+}
+
 
 func TestGetSongs(t *testing.T) {
        // setup some fake requests
@@ -35,3 +62,29 @@ func TestGetSongs(t *testing.T) {
                }
        })
 }
+
+
+func TestSongsCreate(t *testing.T) {
+       // setup fake requests and readers
+       r := httptest.NewRequest("POST", "/api/songs/create", &CreateReader{})
+       wrapper := dbhandling.NewDbWrapper("localhost:6379", "./testing/songs")
+
+       t.Run("SongsCreate1", func(t *testing.T) {
+               recorder := httptest.NewRecorder()
+               wrapper.SongsCreate(recorder, r)
+
+               // check if the answer in the recorder is correcct
+               response := recorder.Result()
+               if response.Status != "200 OK" {
+                       t.Error("Did not return an OK response code")
+               }
+
+               // check if the data is in the database
+
+               _, err := wrapper.RedisDb.HGetAll(wrapper.Ctx, "song:11").Result()
+               if err != nil {
+                       t.Error("Error when getting song:11")
+               }
+
+       })
+}