2024-02-29 22:31:42 +03:00
|
|
|
defmodule Algora.Chat.Message do
|
|
|
|
use Ecto.Schema
|
2024-05-23 14:03:57 +03:00
|
|
|
alias Algora.Accounts.{User, Entity}
|
2024-05-05 02:47:05 +03:00
|
|
|
alias Algora.Library.Video
|
2024-02-29 22:31:42 +03:00
|
|
|
import Ecto.Changeset
|
|
|
|
|
2024-07-11 19:28:50 +03:00
|
|
|
@derive {Jason.Encoder,
|
|
|
|
only: [
|
|
|
|
:body,
|
|
|
|
:platform,
|
|
|
|
:sender_handle,
|
|
|
|
:sender_name,
|
|
|
|
:sender_avatar_url,
|
|
|
|
:inserted_at
|
|
|
|
]}
|
2024-02-29 22:31:42 +03:00
|
|
|
schema "messages" do
|
|
|
|
field :body, :string
|
2024-08-15 17:59:24 +03:00
|
|
|
field :platform_id, :string
|
2024-05-23 14:03:57 +03:00
|
|
|
field :platform, :string, virtual: true
|
2024-02-29 22:31:42 +03:00
|
|
|
field :sender_handle, :string, virtual: true
|
2024-06-23 18:02:01 +03:00
|
|
|
field :sender_name, :string, virtual: true
|
|
|
|
field :sender_avatar_url, :string, virtual: true
|
2024-05-03 16:38:50 +03:00
|
|
|
field :channel_id, :integer, virtual: true
|
2024-05-23 14:03:57 +03:00
|
|
|
belongs_to :entity, Entity
|
2024-05-05 02:47:05 +03:00
|
|
|
belongs_to :user, User
|
|
|
|
belongs_to :video, Video
|
2024-02-29 22:31:42 +03:00
|
|
|
|
|
|
|
timestamps()
|
|
|
|
end
|
|
|
|
|
|
|
|
@doc false
|
|
|
|
def changeset(message, attrs) do
|
|
|
|
message
|
2024-08-15 17:59:24 +03:00
|
|
|
|> cast(attrs, [:body, :platform_id])
|
2024-02-29 22:31:42 +03:00
|
|
|
|> validate_required([:body])
|
|
|
|
end
|
2024-05-05 02:47:05 +03:00
|
|
|
|
2024-05-23 14:03:57 +03:00
|
|
|
def put_entity(%Ecto.Changeset{} = changeset, %Entity{} = entity) do
|
|
|
|
put_assoc(changeset, :entity, entity)
|
|
|
|
end
|
|
|
|
|
2024-05-05 02:47:05 +03:00
|
|
|
def put_user(%Ecto.Changeset{} = changeset, %User{} = user) do
|
|
|
|
put_assoc(changeset, :user, user)
|
|
|
|
end
|
|
|
|
|
|
|
|
def put_video(%Ecto.Changeset{} = changeset, %Video{} = video) do
|
|
|
|
put_assoc(changeset, :video, video)
|
|
|
|
end
|
2024-02-29 22:31:42 +03:00
|
|
|
end
|