Can fetch records by a specific artist
This commit is contained in:
@@ -6,7 +6,7 @@ defmodule MusicLibrary.Records do
|
||||
import Ecto.Query, warn: false
|
||||
alias MusicLibrary.Repo
|
||||
|
||||
alias MusicLibrary.Records.{Cover, Record, SearchParser}
|
||||
alias MusicLibrary.Records.{ArtistRecord, Cover, Record, SearchParser}
|
||||
|
||||
def essential_fields do
|
||||
[
|
||||
@@ -17,6 +17,7 @@ defmodule MusicLibrary.Records do
|
||||
:artists,
|
||||
:genres,
|
||||
:musicbrainz_id,
|
||||
:purchased_at,
|
||||
:release_ids,
|
||||
:included_release_group_ids,
|
||||
:cover_hash,
|
||||
@@ -89,6 +90,26 @@ defmodule MusicLibrary.Records do
|
||||
|
||||
def get_record!(id), do: Repo.get!(Record, id)
|
||||
|
||||
def get_artist(musicbrainz_id) do
|
||||
q =
|
||||
from ar in ArtistRecord,
|
||||
where: ar.musicbrainz_id == ^musicbrainz_id,
|
||||
limit: 1,
|
||||
select: ar.artist
|
||||
|
||||
Repo.one(q)
|
||||
end
|
||||
|
||||
def get_artist_records(musicbrainz_id) do
|
||||
q =
|
||||
from r in Record,
|
||||
join: ar in ArtistRecord,
|
||||
on: r.id == ar.record_id and ar.musicbrainz_id == ^musicbrainz_id,
|
||||
select: ^essential_fields()
|
||||
|
||||
Repo.all(q)
|
||||
end
|
||||
|
||||
def get_cover(id) do
|
||||
q =
|
||||
from r in Record,
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
defmodule MusicLibrary.Records.ArtistRecord do
|
||||
@moduledoc """
|
||||
This is a lookup table that maps from an artist musicbrainz_id to a record id.
|
||||
"""
|
||||
use Ecto.Schema
|
||||
|
||||
alias MusicLibrary.Records.Artist
|
||||
|
||||
@primary_key false
|
||||
schema "artist_records" do
|
||||
field :musicbrainz_id, Ecto.UUID
|
||||
field :record_id, Ecto.UUID
|
||||
|
||||
embeds_one :artist, Artist
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user