mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 05:23:03 +12:00
fix: undo regression where errors weren't wrapped in a changeset
This commit is contained in:
parent
7ff3a96db2
commit
5a462a3ffc
6 changed files with 22 additions and 12 deletions
|
@ -461,7 +461,7 @@ defmodule Ash.Actions.Create do
|
|||
upsert? ->
|
||||
resource
|
||||
|> Ash.DataLayer.upsert(changeset, upsert_keys)
|
||||
|> Ash.Actions.Helpers.rollback_if_in_transaction(changeset.resource)
|
||||
|> Ash.Actions.Helpers.rollback_if_in_transaction(changeset)
|
||||
|> add_tenant(changeset)
|
||||
|> manage_relationships(api, changeset,
|
||||
actor: actor,
|
||||
|
@ -472,7 +472,7 @@ defmodule Ash.Actions.Create do
|
|||
true ->
|
||||
resource
|
||||
|> Ash.DataLayer.create(changeset)
|
||||
|> Ash.Actions.Helpers.rollback_if_in_transaction(changeset.resource)
|
||||
|> Ash.Actions.Helpers.rollback_if_in_transaction(changeset)
|
||||
|> add_tenant(changeset)
|
||||
|> manage_relationships(api, changeset,
|
||||
actor: actor,
|
||||
|
|
|
@ -323,10 +323,10 @@ defmodule Ash.Actions.Destroy do
|
|||
if result = changeset.context[:private][:action_result] do
|
||||
result
|
||||
else
|
||||
resource
|
||||
|> Ash.DataLayer.destroy(changeset)
|
||||
|> Ash.Actions.Helpers.rollback_if_in_transaction(changeset.resource)
|
||||
|> case do
|
||||
resource
|
||||
|> Ash.DataLayer.destroy(changeset)
|
||||
|> Ash.Actions.Helpers.rollback_if_in_transaction(changeset)
|
||||
|> case do
|
||||
:ok ->
|
||||
{:ok,
|
||||
Ash.Resource.set_meta(record, %Ecto.Schema.Metadata{
|
||||
|
|
|
@ -2,9 +2,9 @@ defmodule Ash.Actions.Helpers do
|
|||
@moduledoc false
|
||||
require Logger
|
||||
|
||||
def rollback_if_in_transaction({:error, error}, resource) do
|
||||
if Ash.DataLayer.in_transaction?(resource) do
|
||||
Ash.DataLayer.rollback(resource, error)
|
||||
def rollback_if_in_transaction({:error, error}, changeset) do
|
||||
if Ash.DataLayer.in_transaction?(changeset.resource) do
|
||||
Ash.DataLayer.rollback(changeset.resource, Ash.Changeset.add_error(changeset, error))
|
||||
else
|
||||
{:error, error}
|
||||
end
|
||||
|
|
|
@ -453,7 +453,7 @@ defmodule Ash.Actions.Update do
|
|||
|
||||
resource
|
||||
|> Ash.DataLayer.update(changeset)
|
||||
|> Ash.Actions.Helpers.rollback_if_in_transaction(changeset.resource)
|
||||
|> Ash.Actions.Helpers.rollback_if_in_transaction(changeset)
|
||||
|> add_tenant(changeset)
|
||||
|> manage_relationships(api, changeset,
|
||||
actor: actor,
|
||||
|
|
|
@ -1814,8 +1814,12 @@ defmodule Ash.Changeset do
|
|||
case resources do
|
||||
[] ->
|
||||
{:error, error}
|
||||
|
||||
_ ->
|
||||
Ash.DataLayer.rollback(changeset.resource, error)
|
||||
Ash.DataLayer.rollback(
|
||||
changeset.resource,
|
||||
Ash.Changeset.add_error(changeset, error)
|
||||
)
|
||||
end
|
||||
|
||||
other ->
|
||||
|
@ -1842,6 +1846,7 @@ defmodule Ash.Changeset do
|
|||
end
|
||||
|
||||
{:ok, value, changeset, Map.put(instructions, :notifications, notifications)}
|
||||
|
||||
{:ok, {:error, error}} ->
|
||||
{:error, error}
|
||||
|
||||
|
@ -3987,6 +3992,10 @@ defmodule Ash.Changeset do
|
|||
)
|
||||
end
|
||||
|
||||
def add_error(changeset, %__MODULE__{errors: errors}, path) do
|
||||
add_error(changeset, errors, path)
|
||||
end
|
||||
|
||||
def add_error(changeset, error, path) do
|
||||
error
|
||||
|> Ash.Error.set_path(path)
|
||||
|
|
|
@ -259,7 +259,8 @@ defmodule Ash.Type.NewType do
|
|||
@impl Ash.Type
|
||||
def storage_type(constraints) do
|
||||
unquote(subtype_of).storage_type(
|
||||
type_constraints(constraints, unquote(subtype_constraints)))
|
||||
type_constraints(constraints, unquote(subtype_constraints))
|
||||
)
|
||||
end
|
||||
|
||||
@impl Ash.Type
|
||||
|
|
Loading…
Reference in a new issue