From 56263e3f4e36bb353463e3020684fb265fe50654 Mon Sep 17 00:00:00 2001 From: 2weiEmu Date: Thu, 16 Apr 2026 00:21:19 +0200 Subject: [PATCH] updated: testing, another thing added, not done tho --- Makefile | 2 ++ pkg/dbhandling/dbhandling.go | 18 +++++------ pkg/dbhandling/songsapi.go | 45 ++++++++++++++++++++++++++-- pkg/dbhandling/songsapi_test.go | 53 +++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index c9c19f7..283906d 100644 --- a/Makefile +++ b/Makefile @@ -18,3 +18,5 @@ test: python3 ./testing/dummy_testing_data.py go test -v ./... + + sudo docker stop redis diff --git a/pkg/dbhandling/dbhandling.go b/pkg/dbhandling/dbhandling.go index f9c6028..334ecbe 100644 --- a/pkg/dbhandling/dbhandling.go +++ b/pkg/dbhandling/dbhandling.go @@ -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) } diff --git a/pkg/dbhandling/songsapi.go b/pkg/dbhandling/songsapi.go index a2e5d49..552a066 100644 --- a/pkg/dbhandling/songsapi.go +++ b/pkg/dbhandling/songsapi.go @@ -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 diff --git a/pkg/dbhandling/songsapi_test.go b/pkg/dbhandling/songsapi_test.go index 78a0937..7108c42 100644 --- a/pkg/dbhandling/songsapi_test.go +++ b/pkg/dbhandling/songsapi_test.go @@ -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") + } + + }) +} -- 2.54.0