mirror of
https://github.com/team-alembic/ash_authentication.git
synced 2024-09-19 12:52:55 +12:00
parent
7b46e131f9
commit
424085b825
1 changed files with 32 additions and 19 deletions
|
@ -60,8 +60,25 @@ defmodule AshAuthentication.Validations.Attribute do
|
|||
"""
|
||||
@spec validate_attribute_unique_constraint(map, [atom], module) :: :ok | {:error, Exception.t()}
|
||||
def validate_attribute_unique_constraint(dsl_state, fields, resource) do
|
||||
fields = MapSet.new(fields)
|
||||
|
||||
identities =
|
||||
dsl_state
|
||||
|> Info.identities()
|
||||
|> Enum.map(&MapSet.new(&1.keys))
|
||||
|
||||
primary_key =
|
||||
dsl_state
|
||||
|> Info.primary_key()
|
||||
|> MapSet.new()
|
||||
|
||||
identities
|
||||
|> Enum.concat(primary_key)
|
||||
|> Enum.find(&MapSet.equal?(&1, fields))
|
||||
|> case do
|
||||
nil ->
|
||||
message =
|
||||
case fields do
|
||||
case Enum.to_list(fields) do
|
||||
[field] ->
|
||||
"The `#{inspect(field)}` attribute on the resource `#{inspect(resource)}` should be uniquely constrained"
|
||||
|
||||
|
@ -74,14 +91,10 @@ defmodule AshAuthentication.Validations.Attribute do
|
|||
"The #{fields} attributes on the resource `#{inspect(resource)}` should be uniquely constrained"
|
||||
end
|
||||
|
||||
fields = MapSet.new(fields)
|
||||
{:error, DslError.exception(path: [:identities, :identity], message: message)}
|
||||
|
||||
dsl_state
|
||||
|> Info.identities()
|
||||
|> Enum.find(&MapSet.equal?(MapSet.new(&1.keys), fields))
|
||||
|> case do
|
||||
nil -> {:error, DslError.exception(path: [:identities, :identity], message: message)}
|
||||
_ -> :ok
|
||||
_ ->
|
||||
:ok
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue