SquidMesh.RunStore.Persistence (squid_mesh v0.1.0-alpha.3)

Copy Markdown View Source

Write-side persistence helpers for workflow runs.

These helpers keep record construction and serialization close to the database-facing code while SquidMesh.RunStore continues to expose the public lifecycle API.

Summary

Types

transition_attrs()

@type transition_attrs() :: %{
  optional(:context) => map(),
  optional(:current_step) => String.t() | atom() | nil,
  optional(:last_error) => map() | nil
}

Functions

build_run_attrs(workflow, trigger, definition, resolved_payload)

@spec build_run_attrs(module(), atom(), SquidMesh.Workflow.Definition.t(), map()) ::
  map()

cancellation_target_status(state)

@spec cancellation_target_status(SquidMesh.Run.status()) ::
  {:ok, SquidMesh.Run.status()}
  | {:error,
     {:invalid_transition, SquidMesh.Run.status(), SquidMesh.Run.status()}}

insert_run_record(repo, attrs)

@spec insert_run_record(module(), map()) ::
  {:ok, SquidMesh.Run.t()} | {:error, {:invalid_run, Ecto.Changeset.t()}}

insert_run_with_dispatch(repo, attrs, dispatch_fun)

@spec insert_run_with_dispatch(module(), map(), (SquidMesh.Run.t() ->
                                             {:ok, term()} | {:error, term()})) ::
  {:ok, SquidMesh.Run.t()}
  | {:error, {:invalid_run, Ecto.Changeset.t()} | term()}

noop_dispatch(run)

@spec noop_dispatch(SquidMesh.Run.t()) :: {:ok, :noop}

replay_run_attrs(source_run, definition)

serialize_transition_attrs(attrs)

@spec serialize_transition_attrs(map()) :: map()

transition_changeset_attrs(to_status, attrs)

@spec transition_changeset_attrs(SquidMesh.Run.status(), transition_attrs()) :: map()

update_run_record(repo, run, attrs)

@spec update_run_record(module(), SquidMesh.Persistence.Run.t(), map()) ::
  {:ok, SquidMesh.Run.t()} | {:error, {:invalid_run, Ecto.Changeset.t()}}