2021-10-29 16:12:23 +00:00
|
|
|
defmodule LiveBeats.MediaLibrary.Song do
|
|
|
|
use Ecto.Schema
|
|
|
|
import Ecto.Changeset
|
|
|
|
|
|
|
|
schema "songs" do
|
|
|
|
field :album_artist, :string
|
|
|
|
field :artist, :string
|
|
|
|
field :date_recorded, :naive_datetime
|
|
|
|
field :date_released, :naive_datetime
|
|
|
|
field :duration, :integer
|
|
|
|
field :title, :string
|
2021-11-01 19:57:53 +00:00
|
|
|
field :mp3_path, :string
|
|
|
|
field :mp3_filename, :string
|
2021-10-29 16:12:23 +00:00
|
|
|
belongs_to :user, LiveBeats.Accounts.User
|
|
|
|
belongs_to :genre, LiveBeats.MediaLibrary.Genre
|
|
|
|
|
|
|
|
timestamps()
|
|
|
|
end
|
|
|
|
|
|
|
|
@doc false
|
|
|
|
def changeset(song, attrs) do
|
|
|
|
song
|
2021-11-01 19:57:53 +00:00
|
|
|
|> cast(attrs, [:album_artist, :artist, :title, :date_recorded, :date_released])
|
|
|
|
|> validate_required([:artist, :title])
|
|
|
|
end
|
|
|
|
|
|
|
|
def put_mp3_path(%Ecto.Changeset{} = changeset) do
|
|
|
|
if changeset.valid? do
|
|
|
|
filename = Ecto.UUID.generate() <> ".mp3"
|
|
|
|
|
|
|
|
changeset
|
|
|
|
|> Ecto.Changeset.put_change(:mp3_filename, filename)
|
2021-11-01 20:00:04 +00:00
|
|
|
|> Ecto.Changeset.put_change(:mp3_path, "priv/static/uploads/songs/#{filename}")
|
2021-11-01 19:57:53 +00:00
|
|
|
else
|
|
|
|
changeset
|
|
|
|
end
|
2021-10-29 16:12:23 +00:00
|
|
|
end
|
|
|
|
end
|