fix: extract member_id from relationship changes during validation (#168)
This commit is contained in:
parent
afd3cc88dc
commit
e30778d286
1 changed files with 21 additions and 2 deletions
|
|
@ -41,18 +41,37 @@ defmodule Mv.Accounts.User.Validations.EmailNotUsedByOtherMember do
|
||||||
if should_validate? do
|
if should_validate? do
|
||||||
case Ash.Changeset.fetch_change(changeset, :email) do
|
case Ash.Changeset.fetch_change(changeset, :email) do
|
||||||
{:ok, new_email} ->
|
{:ok, new_email} ->
|
||||||
check_email_uniqueness(new_email, member_id)
|
# Extract member_id from relationship changes for new links
|
||||||
|
member_id_to_exclude = get_member_id_from_changeset(changeset)
|
||||||
|
check_email_uniqueness(new_email, member_id_to_exclude)
|
||||||
|
|
||||||
:error ->
|
:error ->
|
||||||
# No email change, get current email
|
# No email change, get current email
|
||||||
current_email = Ash.Changeset.get_attribute(changeset, :email)
|
current_email = Ash.Changeset.get_attribute(changeset, :email)
|
||||||
check_email_uniqueness(current_email, member_id)
|
# Extract member_id from relationship changes for new links
|
||||||
|
member_id_to_exclude = get_member_id_from_changeset(changeset)
|
||||||
|
check_email_uniqueness(current_email, member_id_to_exclude)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Extract member_id from changeset, checking relationship changes first
|
||||||
|
# This is crucial for new links where member_id is in manage_relationship changes
|
||||||
|
defp get_member_id_from_changeset(changeset) do
|
||||||
|
# Try to get from relationships (for new links via manage_relationship)
|
||||||
|
case Map.get(changeset.relationships, :member) do
|
||||||
|
[{[%{id: id}], _opts}] when not is_nil(id) ->
|
||||||
|
# Found in relationships - this is a new link
|
||||||
|
id
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
# Fall back to attribute (for existing links)
|
||||||
|
Ash.Changeset.get_attribute(changeset, :member_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp check_email_uniqueness(email, exclude_member_id) do
|
defp check_email_uniqueness(email, exclude_member_id) do
|
||||||
query =
|
query =
|
||||||
Mv.Membership.Member
|
Mv.Membership.Member
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue