From 54f8da81b6bc2657c9a8499804839df61bd5d5c7 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Sat, 19 Oct 2024 19:22:43 +0100 Subject: [PATCH] Insert default purchased_at date when importing a record --- lib/music_library/records.ex | 8 +++++--- lib/music_library/records/record.ex | 4 +++- .../20241019180421_add_purchased_at_to_records.exs | 9 +++++++++ test/music_library_web/live/record_index_test.exs | 4 ++++ 4 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 priv/repo/migrations/20241019180421_add_purchased_at_to_records.exs diff --git a/lib/music_library/records.ex b/lib/music_library/records.ex index cf0d6caa..d094864e 100644 --- a/lib/music_library/records.ex +++ b/lib/music_library/records.ex @@ -123,16 +123,17 @@ defmodule MusicLibrary.Records do def import_from_musicbrainz(musicbrainz_id, opts \\ []) do with format = Keyword.get(opts, :format, "cd"), + purchased_at = Keyword.get(opts, :purchased_at, DateTime.utc_now()), {:ok, release_group} <- musicbrainz().get_release_group(musicbrainz_id), {:ok, cover_data} <- musicbrainz().get_cover_art(musicbrainz_id), - record_params = build_record_params(release_group, cover_data, format) do + record_params = build_record_params(release_group, cover_data, format, purchased_at) do create_record(record_params) else error -> error end end - defp build_record_params(release_group, cover_data, format) do + defp build_record_params(release_group, cover_data, format, purchased_at) do musicbrainz_id = release_group["id"] artists_attrs = @@ -157,7 +158,8 @@ defmodule MusicLibrary.Records do "format" => format, "genres" => Enum.map(release_group["genres"], fn g -> g["name"] end), "cover_url" => "https://coverartarchive.org/release-group/#{musicbrainz_id}/front", - "cover_data" => cover_data + "cover_data" => cover_data, + "purchased_at" => purchased_at } end diff --git a/lib/music_library/records/record.ex b/lib/music_library/records/record.ex index 5964e6e6..2e288417 100644 --- a/lib/music_library/records/record.ex +++ b/lib/music_library/records/record.ex @@ -18,6 +18,7 @@ defmodule MusicLibrary.Records.Record do field :musicbrainz_data, :map field :genres, {:array, :string} field :release, :string + field :purchased_at, :utc_datetime embeds_many :artists, Artist do field :name, :string @@ -41,7 +42,8 @@ defmodule MusicLibrary.Records.Record do :release, :genres, :cover_url, - :cover_data + :cover_data, + :purchased_at ]) |> cast_embed(:artists, with: &artist_changeset/2) |> generate_cover_hash() diff --git a/priv/repo/migrations/20241019180421_add_purchased_at_to_records.exs b/priv/repo/migrations/20241019180421_add_purchased_at_to_records.exs new file mode 100644 index 00000000..0751b78d --- /dev/null +++ b/priv/repo/migrations/20241019180421_add_purchased_at_to_records.exs @@ -0,0 +1,9 @@ +defmodule MusicLibrary.Repo.Migrations.AddPurchasedAtToRecords do + use Ecto.Migration + + def change do + alter table(:records) do + add :purchased_at, :utc_datetime + end + end +end diff --git a/test/music_library_web/live/record_index_test.exs b/test/music_library_web/live/record_index_test.exs index 94a32bb7..4c09c062 100644 --- a/test/music_library_web/live/record_index_test.exs +++ b/test/music_library_web/live/record_index_test.exs @@ -399,6 +399,10 @@ defmodule MusicLibraryWeb.RecordIndexTest do assert record.cover_data == cover_data + assert record.inserted_at !== nil + assert record.updated_at !== nil + assert record.purchased_at !== nil + [marillion] = record.artists assert %MusicLibrary.Records.Record.Artist{