mitgliederverwaltung/lib/accounts/user/member_creation_notifier.ex

43 lines
No EOL
1.1 KiB
Elixir

defmodule Mv.Accounts.User.MemberCreationNotifier do
@moduledoc """
Notifier that automatically creates a member for users who don't have one.
This ensures that every user has an associated member profile.
"""
use Ash.Notifier
def notify(%Ash.Notifier.Notification{
action: %{name: action_name},
resource: Mv.Accounts.User,
data: user
})
when action_name in [:create_user, :register_with_password] do
# Only create member if user doesn't have one
if is_nil(user.member_id) do
create_member_for_user(user)
else
:ok
end
end
def notify(_), do: :ok
defp create_member_for_user(user) do
member_attrs = %{
first_name: "User",
last_name: "Generated",
member_email: user.email
}
case Mv.Membership.create_member(member_attrs) do
{:ok, member} ->
# Update the user with the new member_id
Mv.Accounts.update_user(user, %{member_id: member.id})
{:error, _error} ->
# Log error but don't fail the user creation
# In a real application, you might want to handle this differently
:ok
end
end
end