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:
parent
2e8c9eeccb
commit
b693ab1e26
1 changed files with 13 additions and 6 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue