mirror of
https://github.com/navidrome/navidrome.git
synced 2026-10-08 10:27:08 +02:00
* feat(subsonic): add averageRating to API responses Add averageRating attribute to Subsonic API responses for artists, albums, and songs. The average is calculated across all user ratings. * perf(db): add index for average rating queries Add composite index on (item_id, item_type, rating) to optimize the correlated subquery used for calculating average ratings. Signed-off-by: Terry Raimondo <terry.raimondo@gmail.com> * test: add tests for averageRating feature Add tests for: - Album.AverageRating calculation in persistence layer - MediaFile.AverageRating calculation in persistence layer - AverageRating mapping in subsonic response helpers Signed-off-by: Terry Raimondo <terry.raimondo@gmail.com> * test: improve averageRating rounding test with 3 users Add third test user to fixtures and update rounding test to use 3 ratings (5 + 4 + 4) / 3 = 4.33 for proper decimal rounding coverage. Signed-off-by: Terry Raimondo <terry.raimondo@gmail.com> * perf: store avg_rating on entity tables instead of using subquery - Add avg_rating column to album, media_file, and artist tables - Update SetRating() to recalculate and store average when ratings change - Read avg_rating directly from entity table in withAnnotation() - Remove old annotation index migration (no longer needed) This trades write-time computation for read-time performance by pre-computing the average rating instead of using a correlated subquery on every read. * feat: add Subsonic.EnableAverageRating config option (default true) Allow administrators to disable exposing averageRating in Subsonic API responses if they don't want to expose other users' rating data. The avg_rating column is still updated internally when users rate items, but the value is only included in API responses when this option is enabled. * address PR comments - Use structs:"avg_rating" with db:"avg_rating" tag instead of SQL alias - Remove avg_rating indexes (not needed) - Populate avg_rating columns from existing ratings in migration * Woops * rename avg_rating column to average_rating --------- Signed-off-by: Terry Raimondo <terry.raimondo@gmail.com> |
||
|---|---|---|
| .. | ||
| criteria | ||
| id | ||
| metadata | ||
| request | ||
| album.go | ||
| album_test.go | ||
| annotation.go | ||
| artist.go | ||
| artist_info.go | ||
| artwork_id.go | ||
| artwork_id_test.go | ||
| bookmark.go | ||
| datastore.go | ||
| errors.go | ||
| file_types.go | ||
| file_types_test.go | ||
| folder.go | ||
| folder_test.go | ||
| genre.go | ||
| get_entity.go | ||
| library.go | ||
| lyrics.go | ||
| lyrics_test.go | ||
| mediafile.go | ||
| mediafile_internal_test.go | ||
| mediafile_test.go | ||
| model_suite_test.go | ||
| participants.go | ||
| participants_test.go | ||
| player.go | ||
| playlist.go | ||
| playlist_test.go | ||
| playqueue.go | ||
| plugin.go | ||
| properties.go | ||
| radio.go | ||
| scanner.go | ||
| scanner_test.go | ||
| scrobble.go | ||
| scrobble_buffer.go | ||
| searchable.go | ||
| share.go | ||
| tag.go | ||
| tag_mappings.go | ||
| tag_test.go | ||
| transcoding.go | ||
| user.go | ||
| user_props.go | ||
| user_test.go | ||