mirror of
https://github.com/ash-project/ash_oban.git
synced 2024-09-21 05:43:24 +12:00
24 lines
648 B
Elixir
24 lines
648 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])
|
|
primary_key = Ash.Resource.Info.primary_key(changeset.resource)
|
|
|
|
if !trigger do
|
|
raise "No such trigger #{opts[:trigger]} for resource #{inspect(changeset.resource)}"
|
|
end
|
|
|
|
Ash.Changeset.after_action(changeset, fn _changeset, result ->
|
|
%{primary_key: Map.take(result, primary_key)}
|
|
|> trigger.worker.new()
|
|
|> Oban.insert!()
|
|
|
|
{:ok, result}
|
|
end)
|
|
end
|
|
end
|