Files
music_library/lib/music_brainz/artist.ex
T
2025-04-28 20:15:35 +01:00

34 lines
861 B
Elixir

defmodule MusicBrainz.Artist do
@enforce_keys [:id, :name, :sort_name]
defstruct [:id, :name, :sort_name, :country, :relations, :musicbrainz_data]
def from_api_response(r) do
%__MODULE__{
id: r["id"],
name: r["name"],
sort_name: r["sort-name"],
country: r["country"],
relations: parse_relations(r["relations"] || []),
musicbrainz_data: r
}
end
def get_discogs_id(r) do
Enum.find_value(r.relations, fn relation ->
if relation.type == "discogs", do: parse_discogs_id(relation.url["resource"])
end)
end
defp parse_relations(relations) do
Enum.map(relations, fn relation ->
%{
type: relation["type"],
url: relation["url"]
}
end)
end
defp parse_discogs_id("https://www.discogs.com/artist/" <> id), do: id
defp parse_discogs_id(_other), do: nil
end