Current section

Files

Jump to
tama_ex lib tama_ex message params.ex
Raw

lib/tama_ex/message/params.ex

defmodule TamaEx.Message.Params do
use Ecto.Schema
import Ecto.Changeset
@derive Jason.Encoder
alias TamaEx.Message.Params.Author
alias TamaEx.Message.Params.Thread
@valid_attrs [
:recipient,
:class,
:identifier,
:content,
:index
]
@primary_key false
embedded_schema do
field :recipient, :string
field :class, :string, default: "user-message"
field :identifier, :string
field :content, :string
field :index, :integer
embeds_one :author, Author
embeds_one :thread, Thread
end
def changeset(params, attrs) do
params
|> cast(attrs, @valid_attrs)
|> validate_required([:recipient, :identifier, :content, :index])
|> cast_embed(:author, required: true)
|> cast_embed(:thread, required: true)
end
def validate(attrs) when is_map(attrs) do
%__MODULE__{}
|> changeset(attrs)
|> case do
%Ecto.Changeset{valid?: true} = changeset ->
{:ok, apply_changes(changeset)}
%Ecto.Changeset{valid?: false} = changeset ->
raise Ecto.InvalidChangesetError, action: :validate, changeset: changeset
end
end
end