navidrome/persistence
Deluan 6316c3d137 feat: implement per-library artist statistics with automatic aggregation
Implemented comprehensive multi-library support for artist statistics that
automatically aggregates stats from user-accessible libraries. This fundamental
change moves artist statistics from global scope to per-library granularity
while maintaining backward compatibility and transparent operation.

Key changes include:
- Migrated artist statistics from global artist.stats to per-library library_artist.stats
- Added automatic library filtering and aggregation in existing Get/GetAll methods
- Updated role-based filtering to work with per-library statistics storage
- Enhanced statistics calculation to process and store stats per library
- Implemented user permission-aware aggregation that respects library access control
- Added comprehensive test coverage for library filtering and restricted user access
- Created helper functions to ensure proper library associations in tests

This enables users to see statistics that accurately reflect only the content
from libraries they have access to, providing proper multi-tenant behavior
while maintaining the existing API surface and UI functionality.

Signed-off-by: Deluan <deluan@navidrome.org>
2025-07-16 18:10:15 -04:00
..
album_repository.go feat: add musicFolderId parameter support to Search2 and Search3 endpoints 2025-07-16 18:10:15 -04:00
album_repository_test.go feat(server): add Role filters to albums (#3829) 2025-03-14 21:43:52 -04:00
artist_repository.go feat: implement per-library artist statistics with automatic aggregation 2025-07-16 18:10:15 -04:00
artist_repository_test.go feat: implement per-library artist statistics with automatic aggregation 2025-07-16 18:10:15 -04:00
collation_test.go revert: separation of write and read DBs 2024-11-19 18:41:50 -05:00
export_test.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
folder_repository.go feat(repository): apply library filtering in CountAll methods for albums, folders, and media files 2025-07-16 18:10:14 -04:00
genre_repository.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
helpers.go fix(scanner): optimize refresh (#4059) 2025-05-14 20:47:03 -04:00
helpers_test.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
library_repository.go fix: correct updated_at assignment in library repository 2025-07-16 18:10:15 -04:00
library_repository_test.go feat(library): enhance library validation and management with path checks and normalization - WIP 2025-07-16 18:10:14 -04:00
mediafile_repository.go feat: add musicFolderId parameter support to Search2 and Search3 endpoints 2025-07-16 18:10:15 -04:00
mediafile_repository_test.go feat: MBID search functionality for albums, artists and songs (#4286) 2025-06-30 17:11:54 -04:00
persistence.go refactor: rename chain package to run and update references 2025-06-14 17:19:06 -04:00
persistence_suite_test.go chore: remove commented-out genre repository code from persistence tests 2025-07-16 18:10:15 -04:00
persistence_test.go fix(server): play queue should not return empty entries for deleted tracks 2024-09-20 11:22:37 -04:00
player_repository.go fix(insights): fix issues and improve reports (#3558) 2024-12-18 20:37:35 -05:00
player_repository_test.go revert: separation of write and read DBs 2024-11-19 18:41:50 -05:00
playlist_repository.go feat(library): streamline library ID filtering in repositories and update resource filtering logic 2025-07-16 18:10:15 -04:00
playlist_repository_test.go feat(ui): add 'Show in Playlist' context menu (#4139) 2025-05-30 21:26:35 -04:00
playlist_track_repository.go feat(library): streamline library ID filtering in repositories and update resource filtering logic 2025-07-16 18:10:15 -04:00
playqueue_repository.go fix(server): ensure single record per user by reusing existing playqueue ID 2025-06-11 17:26:13 -04:00
playqueue_repository_test.go fix(server): ensure single record per user by reusing existing playqueue ID 2025-06-11 17:26:13 -04:00
property_repository.go Replace beego/orm with dbx (#2693) 2023-12-09 13:52:17 -05:00
property_repository_test.go revert: separation of write and read DBs 2024-11-19 18:41:50 -05:00
radio_repository.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
radio_repository_test.go revert: separation of write and read DBs 2024-11-19 18:41:50 -05:00
scrobble_buffer_repository.go fix(server): send artist mbids when scrobbling to ListenBrainz 2025-02-23 13:30:39 -05:00
scrobble_buffer_repository_test.go feat(plugins): experimental support for plugins (#3998) 2025-06-22 20:45:38 -04:00
share_repository.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
sql_annotations.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
sql_base_repository.go fix(repository): add table name handling in filter functions for SQL queries 2025-07-16 18:10:15 -04:00
sql_base_repository_test.go fix(subsonic): Sort songs by presence of lyrics for getLyrics (#4237) 2025-06-16 12:04:41 -04:00
sql_bookmarks.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
sql_bookmarks_test.go revert: separation of write and read DBs 2024-11-19 18:41:50 -05:00
sql_participations.go fix(server): send artist mbids when scrobbling to ListenBrainz 2025-02-23 13:30:39 -05:00
sql_restful.go feat: MBID search functionality for albums, artists and songs (#4286) 2025-06-30 17:11:54 -04:00
sql_restful_test.go feat: MBID search functionality for albums, artists and songs (#4286) 2025-06-30 17:11:54 -04:00
sql_search.go feat: MBID search functionality for albums, artists and songs (#4286) 2025-06-30 17:11:54 -04:00
sql_search_test.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
sql_tags.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
tag_repository.go fix(scanner): optimize refresh (#4059) 2025-05-14 20:47:03 -04:00
transcoding_repository.go fix(transcoding): restrict transcoding operations to admin users (#4096) 2025-05-21 22:19:23 -04:00
transcoding_repository_test.go fix(transcoding): restrict transcoding operations to admin users (#4096) 2025-05-21 22:19:23 -04:00
user_props_repository.go Replace beego/orm with dbx (#2693) 2023-12-09 13:52:17 -05:00
user_repository.go feat: add default library assignment for new users 2025-07-16 18:10:15 -04:00
user_repository_test.go feat: add default library assignment for new users 2025-07-16 18:10:15 -04:00