Current section
Files
Jump to
Current section
Files
lib/ex_state/ecto/workflow_step.ex
defmodule ExState.Ecto.WorkflowStep do
use ExState.Ecto.Model
alias ExState.Ecto.Workflow
schema "workflow_steps" do
field :state, :string
field :name, :string
field :order, :integer
field :decision, :string
field :participant, :string
field :complete?, :boolean, default: false, source: :is_complete
field :completed_at, :utc_datetime_usec
field :completed_metadata, :map
belongs_to :workflow, Workflow
timestamps()
end
@required_attrs [
:state,
:name,
:order
]
@optional_attrs [
:workflow_id,
:participant,
:complete?,
:completed_at,
:completed_metadata
]
def changeset(workflow_step, attrs) do
workflow_step
|> cast(attrs, @required_attrs ++ @optional_attrs)
|> validate_required(@required_attrs)
end
def put_completion(changeset, metadata) do
case fetch_change(changeset, :complete?) do
{:ok, true} ->
changeset
|> put_change(:completed_metadata, metadata)
|> put_change(:completed_at, DateTime.utc_now())
{:ok, false} ->
changeset
|> put_change(:completed_metadata, nil)
|> put_change(:completed_at, nil)
:error ->
changeset
end
end
end