diff --git a/lib/membership/member.ex b/lib/membership/member.ex index 074f7e4..3af514e 100644 --- a/lib/membership/member.ex +++ b/lib/membership/member.ex @@ -500,50 +500,54 @@ defmodule Mv.Membership.Member do end end - # Validate required custom fields (actor from validation context only; no fallback) + # Validate required custom fields (actor from validation context only; no fallback). + # Only for create_member/update_member; skip for set_vereinfacht_contact_id (internal sync + # only sets vereinfacht_contact_id; custom fields were already validated and saved). validate fn changeset, context -> - provided_values = provided_custom_field_values(changeset) - actor = context.actor + provided_values = provided_custom_field_values(changeset) + actor = context.actor - case Mv.Membership.list_required_custom_fields(actor: actor) do - {:ok, required_custom_fields} -> - missing_fields = missing_required_fields(required_custom_fields, provided_values) + case Mv.Membership.list_required_custom_fields(actor: actor) do + {:ok, required_custom_fields} -> + missing_fields = + missing_required_fields(required_custom_fields, provided_values) - if Enum.empty?(missing_fields) do - :ok - else - build_custom_field_validation_error(missing_fields) - end + if Enum.empty?(missing_fields) do + :ok + else + build_custom_field_validation_error(missing_fields) + end - {:error, %Ash.Error.Forbidden{}} -> - Logger.warning( - "Required custom fields validation: actor not authorized to read CustomField" - ) + {:error, %Ash.Error.Forbidden{}} -> + Logger.warning( + "Required custom fields validation: actor not authorized to read CustomField" + ) - {:error, - field: :custom_field_values, - message: - "You are not authorized to perform this action. Please sign in again or contact support."} + {:error, + field: :custom_field_values, + message: + "You are not authorized to perform this action. Please sign in again or contact support."} - {:error, :missing_actor} -> - Logger.warning("Required custom fields validation: no actor in context") + {:error, :missing_actor} -> + Logger.warning("Required custom fields validation: no actor in context") - {:error, - field: :custom_field_values, - message: - "You are not authorized to perform this action. Please sign in again or contact support."} + {:error, + field: :custom_field_values, + message: + "You are not authorized to perform this action. Please sign in again or contact support."} - {:error, error} -> - Logger.error( - "Failed to load custom fields for validation: #{inspect(error)}. Required field validation cannot be performed." - ) + {:error, error} -> + Logger.error( + "Failed to load custom fields for validation: #{inspect(error)}. Required field validation cannot be performed." + ) - {:error, - field: :custom_field_values, - message: - "Unable to validate required custom fields. Please try again or contact support."} - end - end + {:error, + field: :custom_field_values, + message: + "Unable to validate required custom fields. Please try again or contact support."} + end + end, + where: [action_is([:create_member, :update_member])] # Validate member fields that are marked as required in settings or by Vereinfacht. # When settings cannot be loaded, we still enforce email + Vereinfacht-required fields.