feat: cache album tracks and load album artists on album fetch

- Add SaveAlbumTracks to TrackRepository for batch track caching
- Extend album loadRelations to join album_artists with artist data
- Cache album tracks in GetAlbumTracks after provider fetch
- Ensure artists cached when fetching single album
This commit is contained in:
Alexander
2026-05-09 19:28:44 +02:00
parent 9f1318e79e
commit 88372c9301
7 changed files with 131 additions and 6 deletions
+18 -1
View File
@@ -108,6 +108,8 @@ func (s *MetadataService) GetAlbum(ctx context.Context, id string) (*domain.Albu
return nil, err
}
s.ensureArtistsCached(ctx, []domain.Album{*album})
if saveErr := s.albums.Save(ctx, album); saveErr != nil {
log.Warn().Err(saveErr).Str("album_id", id).Msg("failed to cache album")
return album, nil
@@ -246,5 +248,20 @@ func (s *MetadataService) GetAlbumTracks(ctx context.Context, albumID string) ([
metrics.CacheMisses.WithLabelValues("album_tracks").Inc()
log.Debug().Str("album_id", albumID).Str("provider", s.provider.Name()).Msg("album tracks cache miss, querying provider")
return s.provider.GetAlbumTracks(ctx, albumID)
tracks, err = s.provider.GetAlbumTracks(ctx, albumID)
if err != nil {
return nil, err
}
album, err := s.albums.GetByExternalID(ctx, s.provider.Name(), albumID)
if err == nil {
if saveErr := s.tracks.SaveAlbumTracks(ctx, album.ID, tracks); saveErr != nil {
log.Warn().Err(saveErr).Str("album_id", albumID).Msg("failed to cache album tracks")
} else {
log.Debug().Str("album_id", albumID).Int("count", len(tracks)).Msg("album tracks cached")
}
}
return tracks, nil
}