Associate artists and records
This commit is contained in:
@@ -2,6 +2,8 @@ defmodule MusicLibrary.Records.Artist do
|
|||||||
use Ecto.Schema
|
use Ecto.Schema
|
||||||
import Ecto.Changeset
|
import Ecto.Changeset
|
||||||
|
|
||||||
|
alias MusicLibrary.{Records.ArtistRecord, Records.Record}
|
||||||
|
|
||||||
@primary_key {:id, :binary_id, autogenerate: true}
|
@primary_key {:id, :binary_id, autogenerate: true}
|
||||||
@foreign_key_type :binary_id
|
@foreign_key_type :binary_id
|
||||||
schema "artists" do
|
schema "artists" do
|
||||||
@@ -9,6 +11,8 @@ defmodule MusicLibrary.Records.Artist do
|
|||||||
field :image, :string
|
field :image, :string
|
||||||
field :musicbrainz_id, Ecto.UUID
|
field :musicbrainz_id, Ecto.UUID
|
||||||
|
|
||||||
|
many_to_many :records, Record, join_through: ArtistRecord
|
||||||
|
|
||||||
timestamps(type: :utc_datetime)
|
timestamps(type: :utc_datetime)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
defmodule MusicLibrary.Records.ArtistRecord do
|
||||||
|
use Ecto.Schema
|
||||||
|
import Ecto.Changeset
|
||||||
|
|
||||||
|
@primary_key {:id, :binary_id, autogenerate: true}
|
||||||
|
@foreign_key_type :binary_id
|
||||||
|
schema "artists_records" do
|
||||||
|
field :artist_id, :binary_id
|
||||||
|
field :record_id, :binary_id
|
||||||
|
|
||||||
|
timestamps(type: :utc_datetime)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
def changeset(artist_record, attrs) do
|
||||||
|
artist_record
|
||||||
|
|> cast(attrs, [])
|
||||||
|
|> validate_required([])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -2,6 +2,8 @@ defmodule MusicLibrary.Records.Record do
|
|||||||
use Ecto.Schema
|
use Ecto.Schema
|
||||||
import Ecto.Changeset
|
import Ecto.Changeset
|
||||||
|
|
||||||
|
alias MusicLibrary.{Records.Artist, Records.ArtistRecord}
|
||||||
|
|
||||||
@primary_key {:id, :binary_id, autogenerate: true}
|
@primary_key {:id, :binary_id, autogenerate: true}
|
||||||
@foreign_key_type :binary_id
|
@foreign_key_type :binary_id
|
||||||
schema "records" do
|
schema "records" do
|
||||||
@@ -12,6 +14,8 @@ defmodule MusicLibrary.Records.Record do
|
|||||||
field :musicbrainz_id, Ecto.UUID
|
field :musicbrainz_id, Ecto.UUID
|
||||||
field :genres, {:array, :string}
|
field :genres, {:array, :string}
|
||||||
|
|
||||||
|
many_to_many :artists, Artist, join_through: ArtistRecord
|
||||||
|
|
||||||
timestamps(type: :utc_datetime)
|
timestamps(type: :utc_datetime)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
defmodule MusicLibrary.Repo.Migrations.CreateArtistsRecords do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
create table(:artists_records, primary_key: false) do
|
||||||
|
add :id, :binary_id, primary_key: true
|
||||||
|
add :artist_id, references(:artists, on_delete: :nothing, type: :binary_id)
|
||||||
|
add :record_id, references(:records, on_delete: :nothing, type: :binary_id)
|
||||||
|
|
||||||
|
timestamps(type: :utc_datetime)
|
||||||
|
end
|
||||||
|
|
||||||
|
create index(:artists_records, [:artist_id])
|
||||||
|
create index(:artists_records, [:record_id])
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user