I have a read action that I want to do some checks first.
To do that, I want to create some preparations, the first one will fetch some data, and the others will use that data to do some checks.
Here is the preparations that will fetch data and set as an argument inside the query:
defmodule Core.Feedbacks.Template.Actions.AllFromClass.Preparations.GetClass do
@moduledoc false
alias Core.Feedbacks.Class
alias Ash.Error.Changes.InvalidAttribute
use Ash.Resource.Preparation
def prepare(query, _opts, %{actor: actor}) do
class_id = Ash.Query.get_argument(query, :class_id)
case Class.get!(%{id: class_id}, actor: actor) do
nil ->
# TODO give the error a code
error = InvalidAttribute.exception(message: "Can't find class")
Ash.Query.add_error(query, error)
class ->
Ash.Query.set_argument(query, :class, class)
end
end
end
As you can see, I get a class_id
argument, fetch the class with it, and then I use Ash.Query.set_argument
to add the class
argument.
The problem is that this call doesn´t do anything, if I dbg
the query after the set_argument
call, the arguments
field only contains the class_id
argument.