chore: fix transaction call

This commit is contained in:
Zach Daniel 2023-09-22 17:16:22 -04:00
parent b7b2f586a1
commit b6ef345936
2 changed files with 42 additions and 14 deletions

View file

@ -75,14 +75,16 @@ defmodule Ash.Actions.Action do
{:error, error} {:error, error}
end end
end, end,
nil,
%{ %{
type: :generic, type: :generic,
metadata: %{ metadata: %{
resource: input.resource, resource: input.resource,
action: input.action.name, action: input.action.name,
input: input,
actor: opts[:actor] actor: opts[:actor]
}, },
data_layer_context: input.context[:data_layer] data_layer_context: input.context[:data_layer] || %{}
} }
) )
|> case do |> case do

View file

@ -14,35 +14,61 @@ defmodule Ash.DataLayer do
@type data_layer_query() :: struct @type data_layer_query() :: struct
@type lock_type :: :for_update | term() @type lock_type :: :for_update | term()
@type transaction_reason :: @type transaction_reason ::
%{type: :create, metadata: %{resource: Ash.Resource.t(), action: atom}} %{
required(:type) => :create,
required(:metadata) => %{resource: Ash.Resource.t(), action: atom},
optional(:data_layer_context) => %{}
}
| %{ | %{
type: :update, required(:type) => :update,
metadata: %{ required(:metadata) => %{
resource: Ash.Resource.t(), resource: Ash.Resource.t(),
action: atom, action: atom,
record: Ash.Resource.record(), record: Ash.Resource.record(),
actor: term() actor: term()
} },
optional(:data_layer_context) => %{}
} }
| %{ | %{
type: :destroy, required(:type) => :destroy,
metadata: %{ required(:metadata) => %{
resource: Ash.Resource.t(), resource: Ash.Resource.t(),
action: atom, action: atom,
record: Ash.Resource.record(), record: Ash.Resource.record(),
actor: term() actor: term()
} },
optional(:data_layer_context) => %{}
} }
| %{ | %{
type: :read, required(:type) => :read,
metadata: %{resource: Ash.Resource.t(), query: Ash.Query.t(), actor: term()} required(:metadata) => %{
resource: Ash.Resource.t(),
query: Ash.Query.t(),
actor: term()
},
optional(:data_layer_context) => %{}
} }
| %{ | %{
type: :flow_transaction, required(:type) => :flow_transaction,
metadata: %{step_name: atom | list(term), flow: module(), actor: term()} required(:metadata) => %{
resource: Ash.Resource.t(),
input: Ash.ActionInput.t(),
action: atom,
actor: term()
},
optional(:data_layer_context) => %{}
} }
| %{type: :custom, metadata: map()} | %{
| %{type: atom, metadata: map()} required(:type) => :generic,
required(:metadata) => %{
step_name: atom | list(term),
flow: module(),
actor: term()
},
optional(:data_layer_context) => %{}
}
| %{required(:type) => :custom, required(:metadata) => map()}
| %{required(:type) => atom, required(:metadata) => map()}
@type feature() :: @type feature() ::
:transact :transact