From bcb70c9e1b98b62fd4ab83178d741d647ea0b250 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Tue, 24 Sep 2024 09:40:52 +0100 Subject: [PATCH] Store artists when importing a record --- lib/music_library/records/record.ex | 8 ++++++++ .../live/record_live/search_component.ex | 2 ++ test/music_library/records_test.exs | 19 ++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/music_library/records/record.ex b/lib/music_library/records/record.ex index a255afcd..83cbbbe2 100644 --- a/lib/music_library/records/record.ex +++ b/lib/music_library/records/record.ex @@ -27,9 +27,17 @@ defmodule MusicLibrary.Records.Record do def changeset(record, attrs) do record |> cast(attrs, [:type, :title, :musicbrainz_id, :year, :genres, :image_url, :image_data]) + |> cast_embed(:artists, with: &artist_changeset/2) |> validate_required([:type, :title, :musicbrainz_id, :year, :genres]) end + @doc false + def artist_changeset(artist, attrs) do + artist + |> cast(attrs, [:name, :sort_name, :disambiguation, :musicbrainz_id]) + |> validate_required([:name, :sort_name, :musicbrainz_id]) + end + def add_artists(record, artists_attrs) do record |> change() diff --git a/lib/music_library_web/live/record_live/search_component.ex b/lib/music_library_web/live/record_live/search_component.ex index 623a6b39..056ab379 100644 --- a/lib/music_library_web/live/record_live/search_component.ex +++ b/lib/music_library_web/live/record_live/search_component.ex @@ -106,6 +106,8 @@ defmodule MusicLibraryWeb.RecordLive.SearchComponent do end end + defp parse_year(nil), do: "" + defp parse_year(iso_date) do case Date.from_iso8601(iso_date) do {:ok, date} -> date.year diff --git a/test/music_library/records_test.exs b/test/music_library/records_test.exs index 7a2565a9..76afc095 100644 --- a/test/music_library/records_test.exs +++ b/test/music_library/records_test.exs @@ -34,7 +34,15 @@ defmodule MusicLibrary.RecordsTest do image_url: "some image url", year: 42, musicbrainz_id: "7488a646-e31f-11e4-aace-600308960662", - genres: ["option1", "option2"] + genres: ["option1", "option2"], + artists: [ + %{ + name: "some artist", + sort_name: "some artist", + disambiguation: "some artist", + musicbrainz_id: "7488a646-e31f-11e4-aace-600308960663" + } + ] } assert {:ok, %Record{} = record} = Records.create_record(valid_attrs) @@ -44,6 +52,15 @@ defmodule MusicLibrary.RecordsTest do assert record.year == 42 assert record.musicbrainz_id == "7488a646-e31f-11e4-aace-600308960662" assert record.genres == ["option1", "option2"] + + assert [ + %Record.Artist{ + name: "some artist", + sort_name: "some artist", + disambiguation: "some artist", + musicbrainz_id: "7488a646-e31f-11e4-aace-600308960663" + } + ] = record.artists end test "create_record/1 with invalid data returns error changeset" do