diff --git a/lib/music_library/artists.ex b/lib/music_library/artists.ex index a620f2a1..acc4c644 100644 --- a/lib/music_library/artists.ex +++ b/lib/music_library/artists.ex @@ -2,7 +2,7 @@ defmodule MusicLibrary.Artists do import Ecto.Query, warn: false alias MusicLibrary.Repo - alias MusicLibrary.Records.ArtistRecord + alias MusicLibrary.Records.{ArtistRecord, Record} def get_artist!(musicbrainz_id) do q = @@ -17,11 +17,11 @@ defmodule MusicLibrary.Artists do def get_similar_artists(artist) do case LastFm.get_similar_artists(artist.musicbrainz_id, artist.name) do {:ok, artists} -> - all_artist_ids = get_all_artist_ids() + collected_artist_ids = get_collected_artist_ids() {:ok, Enum.filter(artists, fn a -> - MapSet.member?(all_artist_ids, a.musicbrainz_id) + MapSet.member?(collected_artist_ids, a.musicbrainz_id) end)} error -> @@ -34,4 +34,16 @@ defmodule MusicLibrary.Artists do q |> Repo.all() |> MapSet.new() end + + defp get_collected_artist_ids do + q = + from ar in ArtistRecord, + join: r in Record, + on: r.id == ar.record_id, + where: not is_nil(r.purchased_at), + distinct: true, + select: ar.musicbrainz_id + + q |> Repo.all() |> MapSet.new() + end end