From 78747d7da0166ff7b5b425d59d7f13cb9c0597fe Mon Sep 17 00:00:00 2001 From: Moritz Date: Fri, 12 Dec 2025 16:16:11 +0100 Subject: [PATCH] refactor: improve SetMembershipFeeStartDate change module - Add warning logging for unexpected errors (not missing prerequisites) - Use CalendarCycles.interval() type instead of generic atom() - Update moduledoc to reflect actual usage (no where clause needed) --- .../changes/set_membership_fee_start_date.ex | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/membership_fees/changes/set_membership_fee_start_date.ex b/lib/membership_fees/changes/set_membership_fee_start_date.ex index 6194de7..c274781 100644 --- a/lib/membership_fees/changes/set_membership_fee_start_date.ex +++ b/lib/membership_fees/changes/set_membership_fee_start_date.ex @@ -18,14 +18,16 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDate do create :create_member do # ... - change Mv.MembershipFees.Changes.SetMembershipFeeStartDate do - where [present(:membership_fee_type_id), present(:join_date)] - end + change Mv.MembershipFees.Changes.SetMembershipFeeStartDate end + The change module handles all prerequisite checks internally (join_date, membership_fee_type_id). + If any required data is missing, the changeset is returned unchanged with a warning logged. """ use Ash.Resource.Change + require Logger + alias Mv.MembershipFees.CalendarCycles @impl true @@ -62,8 +64,13 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDate do start_date = calculate_start_date(join_date, interval, include_joining_cycle) Ash.Changeset.force_change_attribute(changeset, :membership_fee_start_date, start_date) else - {:error, _reason} -> - # If we can't calculate the start date (missing required fields), just return unchanged + {:error, reason} -> + # Log warning for debugging purposes, but don't fail the action + # Missing join_date or membership_fee_type_id is expected for partial creates + unless reason in [:join_date_not_set, :membership_fee_type_not_set] do + Logger.warning("Could not auto-set membership_fee_start_date: #{inspect(reason)}") + end + changeset end end @@ -140,7 +147,7 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDate do ~D[2024-04-01] """ - @spec calculate_start_date(Date.t(), atom(), boolean()) :: Date.t() + @spec calculate_start_date(Date.t(), CalendarCycles.interval(), boolean()) :: Date.t() def calculate_start_date(join_date, interval, include_joining_cycle) do if include_joining_cycle do # Start date is the first day of the joining cycle