improvement: add Ash.Error.error_descriptions

This commit is contained in:
Zach Daniel 2024-07-23 09:03:27 -04:00
parent 828bd9c560
commit bfb67a4800
2 changed files with 22 additions and 0 deletions

View file

@ -271,6 +271,8 @@ defmodule Ash.Actions.Update do
with %{valid?: true} = changeset <- Ash.Changeset.validate_multitenancy(changeset),
%{valid?: true} = changeset <- changeset(changeset, domain, action, opts),
%{valid?: true} = changeset <- authorize(changeset, opts),
%{valid?: true} = changeset <-
Ash.Changeset.add_atomic_validations(changeset, opts[:actor], []),
{:ok, result, instructions} <- commit(changeset, domain, opts) do
add_notifications(
changeset.resource,

View file

@ -86,6 +86,26 @@ defmodule Ash.Error do
end
end
def error_descriptions(errors) do
errors
|> to_error_class()
|> Map.get(:errors)
|> Enum.group_by(& &1.class)
|> Enum.sort_by(fn {group, _} ->
Enum.find_index([:forbidden, :invalid, :framework, :unknown], &(&1 == group))
end)
|> Enum.map_join("\n\n", fn {class, class_errors} ->
header = header(class) <> "\n\n"
header <> Enum.map_join(class_errors, "\n", &"* #{Exception.message(&1)}")
end)
end
defp header(:forbidden), do: "Forbidden"
defp header(:invalid), do: "Input Invalid"
defp header(:framework), do: "Framework Error"
defp header(:unknown), do: "Unknown Error"
def ash_error?(value), do: splode_error?(value, __MODULE__)
def set_path(%struct{errors: errors} = container, path)