Ash is not triggering before_action hook’s callback function if the update action is atomic, but when I set require_atomic? false in the action, Ash calls thecallback function (request_approval/3) as expected.
The create action works well. I am not sure why the update action is not working as expected on the atomic updates. What could I be getting wrong?
Below is my change:
defmodule MyApp.Changes.SubmitForApproval do
use Ash.Resource.Change
@impl Ash.Resource.Change
def change(%{context: %{changes_approved?: true}} = changeset, _opts, _context) do
# Changes have been approved, proceed to persist in the datalayer as expected.
changeset
end
def change(changeset, opts, context) do
# Changes are yet to be approved, seek approval before persisting them in the database
# !!! ========================================!!!
# Atomic updates are not firing request_approval/3 function.
# !!! ========================================!!!
Ash.Changeset.before_action(changeset, &request_approval(&1, opts, context))
end
@impl Ash.Resource.Change
def atomic(changeset, opts, context) do
{:ok, change(changeset, opts, context)}
end
defp request_approval(changeset, opts, context) do
# ================================================
# !!! THIS IS NOT REACHED WHEN UPDATES ARE ATOMIC !!!
# ================================================
# 1. Serialize the changeset
# 2. Store the change request for approval
# 2. Prevent submitting to underlying datalayer until approved
changeset
end
end




















