lib/openagents/forum/actor_link.ex

main at 58e6347eeb72 · 939 B

defmodule OpenAgents.Forum.ActorLink do
  use Ecto.Schema
  import Ecto.Changeset

  alias OpenAgents.Accounts.User

  @primary_key {:id, :binary_id, autogenerate: true}
  schema "forum_actor_links" do
    field :actor_ref, :string
    field :status, :string, default: "pending"
    field :proof_method, :string
    field :proof_evidence, :map
    field :linked_at, :utc_datetime_usec
    field :rejected_at, :utc_datetime_usec

    belongs_to :user, User, type: :binary_id

    timestamps(type: :utc_datetime_usec)
  end

  def changeset(link, attrs) do
    link
    |> cast(attrs, [
      :actor_ref,
      :user_id,
      :status,
      :proof_method,
      :proof_evidence,
      :linked_at,
      :rejected_at
    ])
    |> validate_required([:actor_ref, :user_id])
    |> unique_constraint([:actor_ref])
    |> unique_constraint([:user_id, :actor_ref])
    |> validate_inclusion(:status, ["pending", "linked", "rejected"])
  end
end