diff --git a/lib/live_beats/media_library.ex b/lib/live_beats/media_library.ex index f5e20ef..4f6e19c 100644 --- a/lib/live_beats/media_library.ex +++ b/lib/live_beats/media_library.ex @@ -196,7 +196,7 @@ defmodule LiveBeats.MediaLibrary do {:error, failed_op, failed_val, _changes} -> failed_op = case failed_op do - {:song, _number} -> :invalid_song + {:song, _number} -> "Invalid song (#{failed_val.changes.title})" :is_songs_count_updated? -> :invalid failed_op -> failed_op end diff --git a/lib/live_beats/media_library/song.ex b/lib/live_beats/media_library/song.ex index 9caff71..c843ea4 100644 --- a/lib/live_beats/media_library/song.ex +++ b/lib/live_beats/media_library/song.ex @@ -34,6 +34,10 @@ defmodule LiveBeats.MediaLibrary.Song do song |> cast(attrs, [:album_artist, :artist, :title, :attribution, :date_recorded, :date_released]) |> validate_required([:artist, :title]) + |> unique_constraint(:title, + message: "is a duplicated from another song", + name: "songs_user_id_title_artist_index" + ) end def put_user(%Ecto.Changeset{} = changeset, %Accounts.User{} = user) do