Simplify included release groups logic

This makes the code slightly less efficient as it constructs
intermediate structures BEFORE filtering, but it makes it for simpler
code to maintain down the line.

Performance is not visible affected as the largest lists involved count
around 200 items.
This commit is contained in:
Claudio Ortolina
2025-02-10 09:59:25 +00:00
parent 224bcdba38
commit f99a55fca7
2 changed files with 11 additions and 10 deletions
@@ -1,10 +1,7 @@
defmodule MusicLibrary.Records.MusicbrainzData do defmodule MusicLibrary.Records.MusicbrainzData do
def included_release_groups(musicbrainz_data, included_release_group_ids) do def included_release_groups(musicbrainz_data) do
musicbrainz_data musicbrainz_data
|> Map.get("relations", []) |> get_release_groups()
|> Enum.filter(fn relation ->
relation["release_group"]["id"] in included_release_group_ids
end)
|> Enum.map(fn relation -> |> Enum.map(fn relation ->
MusicBrainz.ReleaseGroup.from_api_response(relation["release_group"]) MusicBrainz.ReleaseGroup.from_api_response(relation["release_group"])
end) end)
@@ -17,6 +14,12 @@ defmodule MusicLibrary.Records.MusicbrainzData do
end end
def included_release_group_ids(musicbrainz_data) do def included_release_group_ids(musicbrainz_data) do
musicbrainz_data
|> included_release_groups()
|> Enum.map(fn rg -> rg.id end)
end
defp get_release_groups(musicbrainz_data) do
musicbrainz_data musicbrainz_data
|> Map.get("relations", []) |> Map.get("relations", [])
|> Enum.filter(fn relation -> |> Enum.filter(fn relation ->
@@ -24,6 +27,5 @@ defmodule MusicLibrary.Records.MusicbrainzData do
relation["type"] == "included in" and relation["type"] == "included in" and
relation["direction"] == "backward" relation["direction"] == "backward"
end) end)
|> Enum.map(fn relation -> relation["release_group"]["id"] end)
end end
end end
+3 -4
View File
@@ -33,10 +33,9 @@ defmodule MusicLibrary.Records.Record do
def types, do: @types def types, do: @types
def included_release_groups(record) do def included_release_groups(record) do
MusicbrainzData.included_release_groups( record.musicbrainz_data
record.musicbrainz_data, |> MusicbrainzData.included_release_groups()
record.included_release_group_ids |> Enum.filter(fn rg -> rg.id in record.included_release_group_ids end)
)
end end
def included_release_groups_count(record) do def included_release_groups_count(record) do