Vereinfacht: update existing contact when found by email
Before saving contact_id to member, sync current data to the existing contact so Vereinfacht stays up to date.
This commit is contained in:
parent
62000562f0
commit
361e33adaf
1 changed files with 37 additions and 9 deletions
|
|
@ -36,21 +36,49 @@ defmodule Mv.Vereinfacht do
|
||||||
|
|
||||||
defp do_sync_member(member) do
|
defp do_sync_member(member) do
|
||||||
if present_contact_id?(member.vereinfacht_contact_id) do
|
if present_contact_id?(member.vereinfacht_contact_id) do
|
||||||
case Client.update_contact(member.vereinfacht_contact_id, member) do
|
sync_existing_contact(member)
|
||||||
{:ok, _} -> :ok
|
|
||||||
{:error, reason} -> {:error, reason}
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
case Client.create_contact(member) do
|
ensure_contact_then_save(member)
|
||||||
{:ok, contact_id} ->
|
end
|
||||||
save_contact_id(member, contact_id)
|
end
|
||||||
|
|
||||||
{:error, reason} ->
|
defp sync_existing_contact(member) do
|
||||||
{:error, reason}
|
case Client.update_contact(member.vereinfacht_contact_id, member) do
|
||||||
|
{:ok, _} -> :ok
|
||||||
|
{:error, reason} -> {:error, reason}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp ensure_contact_then_save(member) do
|
||||||
|
case get_or_create_contact_id(member) do
|
||||||
|
{:ok, contact_id} -> save_contact_id(member, contact_id)
|
||||||
|
{:error, _} = err -> err
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Before create: find by email to avoid duplicate contacts (idempotency).
|
||||||
|
# When an existing contact is found, update it with current member data.
|
||||||
|
defp get_or_create_contact_id(member) do
|
||||||
|
email = member |> Map.get(:email) |> to_string() |> String.trim()
|
||||||
|
|
||||||
|
if email == "" do
|
||||||
|
Client.create_contact(member)
|
||||||
|
else
|
||||||
|
case Client.find_contact_by_email(email) do
|
||||||
|
{:ok, existing_id} -> update_existing_contact_and_return_id(existing_id, member)
|
||||||
|
{:error, :not_found} -> Client.create_contact(member)
|
||||||
|
{:error, _} = err -> err
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp update_existing_contact_and_return_id(contact_id, member) do
|
||||||
|
case Client.update_contact(contact_id, member) do
|
||||||
|
{:ok, _} -> {:ok, contact_id}
|
||||||
|
{:error, _} = err -> err
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp save_contact_id(member, contact_id) do
|
defp save_contact_id(member, contact_id) do
|
||||||
system_actor = SystemActor.get_system_actor()
|
system_actor = SystemActor.get_system_actor()
|
||||||
opts = Helpers.ash_actor_opts(system_actor)
|
opts = Helpers.ash_actor_opts(system_actor)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue