diff --git a/persistence/playlist_track_repository.go b/persistence/playlist_track_repository.go index e51ff8ea6..6f409101d 100644 --- a/persistence/playlist_track_repository.go +++ b/persistence/playlist_track_repository.go @@ -108,6 +108,7 @@ func (r *playlistTrackRepository) Read(id string) (any, error) { "rated_at", "f.*", "playlist_tracks.*", + "(select cover_art_updated_at from album where album.id = f.album_id) as cover_art_updated_at", ). Join("media_file f on f.id = media_file_id"). Where(And{Eq{"playlist_id": r.playlistId}, Eq{"playlist_tracks.id": id}}) diff --git a/persistence/playlist_track_repository_test.go b/persistence/playlist_track_repository_test.go index 36f9ae4a9..cd7865e1d 100644 --- a/persistence/playlist_track_repository_test.go +++ b/persistence/playlist_track_repository_test.go @@ -1,6 +1,7 @@ package persistence import ( + "github.com/Masterminds/squirrel" "github.com/navidrome/navidrome/log" "github.com/navidrome/navidrome/model" "github.com/navidrome/navidrome/model/request" @@ -37,6 +38,30 @@ var _ = Describe("PlaylistTrackRepository", func() { }) }) + Describe("Read", func() { + It("exposes the album's cover timestamp on a single track", func() { + tracks, err := repo.GetAll(model.QueryOptions{Sort: "id"}) + Expect(err).ToNot(HaveOccurred()) + Expect(tracks).ToNot(BeEmpty()) + albumID := tracks[0].AlbumID + + albumRepo := NewAlbumRepository(request.WithUser(GinkgoT().Context(), model.User{ID: "userid"}), GetDBXBuilder()).(*albumRepository) + Expect(albumRepo.UpdateImage(albumID, "cover-read.jpg")).To(Succeed()) + DeferCleanup(func() { + // Restore both columns so fixture-equality tests stay untouched + _, _ = albumRepo.executeSQL(squirrel.Update("album"). + Set("uploaded_image", "").Set("cover_art_updated_at", nil). + Where(squirrel.Eq{"id": albumID})) + }) + + got, err := repo.Read(tracks[0].ID) + Expect(err).ToNot(HaveOccurred()) + trk, ok := got.(*model.PlaylistTrack) + Expect(ok).To(BeTrue()) + Expect(trk.CoverArtUpdatedAt).ToNot(BeNil()) + }) + }) + Describe("CountAll", func() { It("returns the number of tracks in the playlist", func() { Expect(repo.CountAll()).To(Equal(int64(2)))