Adds get_recommendation_sources() — for each recommended similar artist it resolves the polymorphic similar_artists.source_artist_id back to the display names of the user's OWN artists (library + watchlist) that list it, by matching against every provider-id column on both tables. The /api/discover/similar-artists endpoint now attaches a 'because' array per recommendation so the UI can show 'because you have X, Y, Z' instead of just a count. Seam tests cover: library + watchlist resolution across different provider-id columns, dedup + name-sort, max_per cap, orphan source omission, profile scoping. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| music_database.py | ||
| personalized_schema.py | ||