refactor: reduce nesting in SyncUserEmailToMember.sync_email
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
Extract apply_sync/1 and sync_by_record_type/4 to satisfy Credo max depth 2.
This commit is contained in:
parent
6aadf4f93b
commit
f7ba98c36b
1 changed files with 20 additions and 17 deletions
|
|
@ -44,26 +44,29 @@ defmodule Mv.EmailSync.Changes.SyncUserEmailToMember do
|
||||||
defp sync_email(changeset) do
|
defp sync_email(changeset) do
|
||||||
Ash.Changeset.around_transaction(changeset, fn cs, callback ->
|
Ash.Changeset.around_transaction(changeset, fn cs, callback ->
|
||||||
result = callback.(cs)
|
result = callback.(cs)
|
||||||
|
apply_sync(result)
|
||||||
with {:ok, record} <- Helpers.extract_record(result),
|
|
||||||
{:ok, user, member} <- get_user_and_member(record) do
|
|
||||||
# When called from Member-side, we need to update the member in the result
|
|
||||||
# When called from User-side, we update the linked member in DB only
|
|
||||||
case record do
|
|
||||||
%Mv.Membership.Member{} ->
|
|
||||||
# Member-side: Override member email in result with user email
|
|
||||||
Helpers.override_with_linked_email(result, user.email)
|
|
||||||
|
|
||||||
%Mv.Accounts.User{} ->
|
|
||||||
# User-side: Sync user email to linked member in DB
|
|
||||||
Helpers.sync_email_to_linked_record(result, member, user.email)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
_ -> result
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp apply_sync(result) do
|
||||||
|
with {:ok, record} <- Helpers.extract_record(result),
|
||||||
|
{:ok, user, member} <- get_user_and_member(record) do
|
||||||
|
sync_by_record_type(result, record, user, member)
|
||||||
|
else
|
||||||
|
_ -> result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# When called from Member-side, we update the member in the result.
|
||||||
|
# When called from User-side, we sync user email to the linked member in DB.
|
||||||
|
defp sync_by_record_type(result, %Mv.Membership.Member{}, user, _member) do
|
||||||
|
Helpers.override_with_linked_email(result, user.email)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp sync_by_record_type(result, %Mv.Accounts.User{}, user, member) do
|
||||||
|
Helpers.sync_email_to_linked_record(result, member, user.email)
|
||||||
|
end
|
||||||
|
|
||||||
# Retrieves user and member - works for both resource types
|
# Retrieves user and member - works for both resource types
|
||||||
# Uses system actor via Loader functions
|
# Uses system actor via Loader functions
|
||||||
defp get_user_and_member(%Mv.Accounts.User{} = user) do
|
defp get_user_and_member(%Mv.Accounts.User{} = user) do
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue