Only show similar artists from collection

This commit is contained in:
Claudio Ortolina
2025-04-09 20:39:47 +01:00
parent 6576034d4e
commit 4fc86c959b
+15 -3
View File
@@ -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