feat: M3 weighted shuffle v1 — real /api/radio with scoring #21

Merged
bvandeusen merged 262 commits from dev into main 2026-04-27 11:00:29 -04:00
Showing only changes of commit d08c937f3b - Show all commits
@@ -8,20 +8,20 @@ import retrofit2.http.Path
import retrofit2.http.Query
/**
* Retrofit interface for the server's native /api/* library surface.
* Retrofit interface for the server's native `/api/...` library surface.
* Mirrors `flutter_client/lib/api/endpoints/library.dart` 1:1.
*
* Notes on shapes:
* - GET /api/artists/{id} returns ArtistDetailWire (ArtistRef fields
* + embedded "albums" array)
* - GET /api/artists/{id}/tracks returns a bare JSON array, not an
* - `GET /api/artists/{id}` returns ArtistDetailWire (ArtistRef fields
* plus embedded "albums" array)
* - `GET /api/artists/{id}/tracks` returns a bare JSON array, not an
* enveloped object — Retrofit's `List<TrackWire>` return type
* handles that.
* - GET /api/albums/{id} returns AlbumDetailWire (AlbumRef fields
* + embedded "tracks" array)
* - GET /api/library/shuffle returns a bare JSON array.
* - `GET /api/albums/{id}` returns AlbumDetailWire (AlbumRef fields
* plus embedded "tracks" array)
* - `GET /api/library/shuffle` returns a bare JSON array.
*
* Home endpoints (/api/home, /api/home/index) live in a separate
* Home endpoints (`/api/home`, `/api/home/index`) live in a separate
* `HomeApi` because they have their own wire types (HomePayload,
* HomeIndex) that are larger and only used by the Home screen.
*/