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
def included_release_groups(musicbrainz_data, included_release_group_ids) do
def included_release_groups(musicbrainz_data) do
musicbrainz_data
|> Map.get("relations", [])
|> Enum.filter(fn relation ->
relation["release_group"]["id"] in included_release_group_ids
end)
|> get_release_groups()
|> Enum.map(fn relation ->
MusicBrainz.ReleaseGroup.from_api_response(relation["release_group"])
end)
@@ -17,6 +14,12 @@ defmodule MusicLibrary.Records.MusicbrainzData do
end
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
|> Map.get("relations", [])
|> Enum.filter(fn relation ->
@@ -24,6 +27,5 @@ defmodule MusicLibrary.Records.MusicbrainzData do
relation["type"] == "included in" and
relation["direction"] == "backward"
end)
|> Enum.map(fn relation -> relation["release_group"]["id"] end)
end
end
+3 -4
View File
@@ -33,10 +33,9 @@ defmodule MusicLibrary.Records.Record do
def types, do: @types
def included_release_groups(record) do
MusicbrainzData.included_release_groups(
record.musicbrainz_data,
record.included_release_group_ids
)
record.musicbrainz_data
|> MusicbrainzData.included_release_groups()
|> Enum.filter(fn rg -> rg.id in record.included_release_group_ids end)
end
def included_release_groups_count(record) do