diff --git a/lib/membership_fees/changes/validate_same_interval.ex b/lib/membership_fees/changes/validate_same_interval.ex index db2ff3f..1710bda 100644 --- a/lib/membership_fees/changes/validate_same_interval.ex +++ b/lib/membership_fees/changes/validate_same_interval.ex @@ -42,9 +42,9 @@ defmodule Mv.MembershipFees.Changes.ValidateSameInterval do is_nil(current_type_id) -> changeset - # If new type is nil, that's allowed (removing type) + # If new type is nil, reject the change (membership_fee_type_id is required) is_nil(new_type_id) -> - changeset + add_nil_type_error(changeset) # Both types exist - validate intervals match true -> @@ -125,6 +125,17 @@ defmodule Mv.MembershipFees.Changes.ValidateSameInterval do ) end + # Add validation error when trying to set membership_fee_type_id to nil + defp add_nil_type_error(changeset) do + message = "Cannot remove membership fee type. A membership fee type is required." + + Ash.Changeset.add_error( + changeset, + field: :membership_fee_type_id, + message: message + ) + end + # Format interval atom to human-readable string defp format_interval(:monthly), do: "monthly" defp format_interval(:quarterly), do: "quarterly"