def update( %{
full_name: full_name,
password: password,
password_confirmation: password_confirmation,
email: email,
language: language,
time_zone: time_zone
},
%{context: %{user: %{uid: user_id}}}
) do
user = User |> Repo.get(user_id)
verif_email = user.email === email
case verif_email do
true ->
case AccountClient.account_update(
user_id,
full_name,
password,
email,
language,
time_zone,
password_confirmation
) do
{
:ok,
%{
data: %{
attributes: %{
full_name: full_name,
email: email
},
id: uid
}
}
} ->
{:ok, User.update!(uid, email, full_name)}
err ->
err
end
false ->
with false <- User.check_email(email),
{
:ok,
%{
data: %{
attributes: %{
full_name: full_name,
email: email
},
id: uid
}
}
} <-
AccountClient.account_update(
user_id,
full_name,
password,
email,
language,
time_zone,
password_confirmation
) do
{:ok, User.update!(uid, email, full_name)}
else
true ->
{:error, %{message: "Email has been already taken .."}}
err ->
err
end
end
end