live_beats/lib/live_beats/media_library/song.ex

46 lines
1.2 KiB
Elixir
Raw Normal View History

2021-10-29 16:12:23 +00:00
defmodule LiveBeats.MediaLibrary.Song do
use Ecto.Schema
import Ecto.Changeset
2021-11-05 00:49:19 +00:00
alias LiveBeats.Accounts
2021-10-29 16:12:23 +00:00
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-11-05 00:49:19 +00:00
belongs_to :user, Accounts.User
2021-10-29 16:12:23 +00:00
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])
2021-11-05 00:49:19 +00:00
|> validate_number(:duration, greater_than: 0, less_than: 1200)
end
def put_user(%Ecto.Changeset{} = changeset, %Accounts.User{} = user) do
put_assoc(changeset, :user, user)
2021-11-01 19:57:53 +00:00
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-05 00:49:19 +00:00
|> Ecto.Changeset.put_change(:mp3_path, "uploads/songs/#{filename}")
2021-11-01 19:57:53 +00:00
else
changeset
end
2021-10-29 16:12:23 +00:00
end
end