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 = %{ 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