From f99a55fca7d3046f1590d5cb5daa97c60beaabd1 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Mon, 10 Feb 2025 09:59:25 +0000 Subject: [PATCH] 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. --- lib/music_library/records/musicbrainz_data.ex | 14 ++++++++------ lib/music_library/records/record.ex | 7 +++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/music_library/records/musicbrainz_data.ex b/lib/music_library/records/musicbrainz_data.ex index f46a0c83..06a469a3 100644 --- a/lib/music_library/records/musicbrainz_data.ex +++ b/lib/music_library/records/musicbrainz_data.ex @@ -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 diff --git a/lib/music_library/records/record.ex b/lib/music_library/records/record.ex index e85da2c8..47c81f28 100644 --- a/lib/music_library/records/record.ex +++ b/lib/music_library/records/record.ex @@ -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