43 lines
No EOL
1.1 KiB
Elixir
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 |