lib/openagents/profile_memory/source.ex

58e6347eeb72 · 953 B

defmodule OpenAgents.ProfileMemory.Source do
  @moduledoc false

  use Ecto.Schema
  import Ecto.Changeset

  @primary_key false
  @foreign_key_type :binary_id

  schema "profile_memory_sources" do
    belongs_to :memory_record, OpenAgents.ProfileMemory.Record, primary_key: true
    belongs_to :message, OpenAgents.Conversations.Message, primary_key: true
    field :source_kind, :string
    field :inserted_at, :utc_datetime_usec
  end

  def changeset(source, attributes) do
    source
    |> cast(attributes, [:memory_record_id, :message_id, :source_kind, :inserted_at])
    |> validate_required([:memory_record_id, :message_id, :source_kind, :inserted_at])
    |> validate_inclusion(:source_kind, ["owner_statement", "owner_confirmation"])
    |> foreign_key_constraint(:memory_record_id)
    |> foreign_key_constraint(:message_id)
    |> unique_constraint([:memory_record_id, :message_id],
      name: :profile_memory_sources_pkey
    )
  end
end