Files
Claper/lib/claper/posts/post.ex
2024-08-23 16:52:35 +02:00

66 lines
1.7 KiB
Elixir

defmodule Claper.Posts.Post do
use Ecto.Schema
import Ecto.Changeset
@type t :: %__MODULE__{
id: integer(),
body: String.t(),
uuid: Ecto.UUID.t(),
like_count: integer() | nil,
love_count: integer() | nil,
lol_count: integer() | nil,
name: String.t() | nil,
attendee_identifier: String.t() | nil,
position: integer() | nil,
pinned: boolean() | nil,
event_id: integer() | nil,
user_id: integer() | nil,
reactions: [Claper.Posts.Reaction.t()] | nil,
inserted_at: NaiveDateTime.t(),
updated_at: NaiveDateTime.t()
}
schema "posts" do
field :body, :string
field :uuid, :binary_id
field :like_count, :integer, default: 0
field :love_count, :integer, default: 0
field :lol_count, :integer, default: 0
field :name, :string
field :attendee_identifier, :string
field :position, :integer, default: 0
field :pinned, :boolean, default: false
belongs_to :event, Claper.Events.Event
belongs_to :user, Claper.Accounts.User
has_many :reactions, Claper.Posts.Reaction
timestamps()
end
@doc false
def changeset(post, attrs) do
post
|> cast(attrs, [
:body,
:attendee_identifier,
:user_id,
:like_count,
:love_count,
:lol_count,
:name,
:position,
:pinned
])
|> validate_required([:body, :position])
|> validate_length(:body, min: 2, max: 255)
end
def nickname_changeset(post, attrs) do
post
|> cast(attrs, [:name])
|> validate_required([:name])
|> validate_length(:name, min: 2, max: 20)
end
end