ash_oban/lib/changes/run_oban_trigger.ex
Zach Daniel 12f4207193 improvement: add actor_persister, and use it automatically
improvement: authorize?: true always
2024-02-20 13:02:43 -05:00

25 lines
612 B
Elixir

defmodule AshOban.Changes.RunObanTrigger do
@moduledoc """
Runs an oban trigger by name.
"""
use Ash.Resource.Change
def change(changeset, opts, context) do
trigger = AshOban.Info.oban_trigger(changeset.resource, opts[:trigger])
if !trigger do
raise "No such trigger #{opts[:trigger]} for resource #{inspect(changeset.resource)}"
end
Ash.Changeset.after_action(changeset, fn _changeset, result ->
AshOban.run_trigger(
result,
trigger,
Keyword.put(opts[:oban_job_opts] || [], :actor, context.actor)
)
{:ok, result}
end)
end
end