Files
music_library/lib/music_brainz/release_search_result.ex
T
Claudio Ortolina d077f08afa Start making it more robust
- Use structured data for search/render
- Start testing component
- Start testing domain logic
2025-02-15 18:08:30 +00:00

40 lines
971 B
Elixir

defmodule MusicBrainz.ReleaseSearchResult do
@enforce_keys [:id, :title, :release_group, :artists, :date, :barcode, :media]
defstruct [:id, :title, :release_group, :artists, :date, :barcode, :media]
alias MusicBrainz.ReleaseGroup
def from_api_response(r) do
%__MODULE__{
id: r["id"],
title: r["title"],
release_group: parse_release_group(r["release-group"]),
artists:
r["artist-credit"]
|> Enum.map(fn ac -> ac["artist"]["name"] end)
|> Enum.join(", "),
date: r["date"],
barcode: r["barcode"],
media: parse_media(r["media"])
}
end
defp parse_release_group(rg) do
%{
id: rg["id"],
type: ReleaseGroup.parse_type(rg["primary-type"]),
title: rg["title"]
}
end
defp parse_media(media) do
Enum.map(media, fn m ->
%{
format: m["format"],
track_count: m["track-count"],
disc_count: m["disc-count"]
}
end)
end
end