36 lines
989 B
Elixir
36 lines
989 B
Elixir
defmodule MusicBrainz.ReleaseGroupSearchResult do
|
|
@moduledoc false
|
|
|
|
alias MusicBrainz.ReleaseGroup
|
|
|
|
@enforce_keys [:id, :type, :title, :artists, :release_date]
|
|
defstruct [:id, :type, :title, :artists, :release_date]
|
|
|
|
@type t :: %__MODULE__{
|
|
id: String.t(),
|
|
type: :album | :ep | :live | :compilation | :single | :other,
|
|
title: String.t(),
|
|
artists: String.t(),
|
|
release_date: String.t() | nil
|
|
}
|
|
|
|
@spec from_api_response(map()) :: t()
|
|
def from_api_response(rg) do
|
|
%__MODULE__{
|
|
id: rg["id"],
|
|
type: ReleaseGroup.parse_type(rg["primary-type"]),
|
|
title: rg["title"],
|
|
artists:
|
|
Enum.map_join(rg["artist-credit"], fn ac ->
|
|
ac["artist"]["name"] <> (ac["joinphrase"] || "")
|
|
end),
|
|
release_date: rg["first-release-date"]
|
|
}
|
|
end
|
|
|
|
@spec thumb_url(t()) :: String.t()
|
|
def thumb_url(rgr) do
|
|
"https://coverartarchive.org/release-group/#{rgr.id}/front-250"
|
|
end
|
|
end
|