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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user