defmodule Ash.Error.Framework.ManualActionMissed do
@moduledoc "Used when a manual action should have produced a result, but did not"
use Ash.Error.Exception
def_ash_error([:resource, :action, :type], class: :framework)
defimpl Ash.ErrorKind do
def id(_), do: Ash.UUID.generate()
def code(_), do: "manual_action_missed"
def message(%{resource: resource, action: action, type: :create}) do
"""
Manual action did not produce a result: #{inspect(resource)}.#{action}
For manual actions, you must implement an `after_action` inside of a `change` that returns a newly created record.
For example:
# in the resource
create :special_create do
manual? true
change MyApp.DoCreate
end
# The change
defmodule MyApp.DoCreate do
use Ash.Resource.Change
def change(changeset, _, _) do
Ash.Changeset.after_action(changeset, fn changeset, _result ->
# result will be `nil`, because this is a manual action
result = do_something_that_creates_the_record(changeset)
{:ok, result}
end)
end
end
"""
end
end
end