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)
This commit is contained in:
Moritz 2025-12-12 16:16:11 +01:00
parent 2e8c9eeccb
commit b693ab1e26

View file

@ -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