improvement: read with primary read for trigger

This commit is contained in:
Zach Daniel 2023-07-19 14:08:08 -04:00
parent 60c449b42c
commit 9e07f3f699

View file

@ -165,7 +165,9 @@ defmodule AshOban.Transformers.DefineSchedulers do
|> insert() |> insert()
rescue rescue
e -> e ->
Logger.error("Error running AshOban scheduler #{__MODULE__}.\n#{Exception.format(:error, e, __STACKTRACE__)}") Logger.error(
"Error running AshOban scheduler #{__MODULE__}.\n#{Exception.format(:error, e, __STACKTRACE__)}"
)
reraise e, __STACKTRACE__ reraise e, __STACKTRACE__
end end
@ -277,7 +279,7 @@ defmodule AshOban.Transformers.DefineSchedulers do
handle_error = handle_error(trigger, resource, api) handle_error = handle_error(trigger, resource, api)
work = work(trigger, worker, pro?, api) work = work(trigger, worker, pro?, resource, api)
Module.create( Module.create(
worker_module_name, worker_module_name,
@ -369,7 +371,7 @@ defmodule AshOban.Transformers.DefineSchedulers do
end end
end end
defp work(trigger, worker, pro?, api) do defp work(trigger, worker, pro?, resource, api) do
function_name = function_name =
if pro? do if pro? do
:process :process
@ -377,6 +379,15 @@ defmodule AshOban.Transformers.DefineSchedulers do
:perform :perform
end end
read_action =
case Ash.Resource.Info.primary_action(resource, :read) do
nil ->
trigger.read_action
%{name: name} ->
name
end
if trigger.state != :active do if trigger.state != :active do
quote location: :keep do quote location: :keep do
@impl unquote(worker) @impl unquote(worker)
@ -391,7 +402,7 @@ defmodule AshOban.Transformers.DefineSchedulers do
query() query()
|> Ash.Query.do_filter(primary_key) |> Ash.Query.do_filter(primary_key)
|> Ash.Query.set_context(%{private: %{ash_oban?: true}}) |> Ash.Query.set_context(%{private: %{ash_oban?: true}})
|> Ash.Query.for_read(unquote(trigger.read_action)) |> Ash.Query.for_read(unquote(read_action))
|> unquote(api).read_one() |> unquote(api).read_one()
|> case do |> case do
{:ok, nil} -> {:ok, nil} ->