Packages
A Fair Source multi-agent runtime with deterministic agent scoring and replayable run history.
Current section
Files
Jump to
Current section
Files
lib/syntropy/persistence/run_envelope.ex
defmodule Syntropy.Persistence.RunEnvelope do
@moduledoc false
use Ecto.Schema
import Ecto.Changeset
schema "run_envelopes" do
field(:run_id, :string)
field(:node_id, :string)
field(:status, :string)
field(:kind, :string)
field(:envelope, :map)
field(:started_at, :utc_datetime_usec)
field(:updated_at, :utc_datetime_usec)
field(:completed_at, :utc_datetime_usec)
field(:failed_at, :utc_datetime_usec)
end
@type t :: %__MODULE__{
id: integer() | nil,
run_id: String.t() | nil,
node_id: String.t() | nil,
status: String.t() | nil,
kind: String.t() | nil,
envelope: map() | nil,
started_at: DateTime.t() | nil,
updated_at: DateTime.t() | nil,
completed_at: DateTime.t() | nil,
failed_at: DateTime.t() | nil
}
@spec changeset(t(), map()) :: Ecto.Changeset.t()
def changeset(run_envelope, attrs) do
run_envelope
|> cast(attrs, [
:run_id,
:node_id,
:status,
:kind,
:envelope,
:started_at,
:updated_at,
:completed_at,
:failed_at
])
|> validate_required([:run_id, :node_id, :status, :kind, :envelope, :updated_at])
|> unique_constraint(:run_id)
end
end