feat: add error logging in after_action cycle generation hooks
- Log warnings when cycle generation fails in Member create/update - Extract generate_fn to reduce code duplication - Improves debuggability of silent failures
This commit is contained in:
parent
7e4d3e0a60
commit
2e8c9eeccb
1 changed files with 32 additions and 8 deletions
|
|
@ -112,14 +112,26 @@ defmodule Mv.Membership.Member do
|
|||
# but in test environment it runs synchronously for DB sandbox compatibility
|
||||
change after_action(fn _changeset, member, _context ->
|
||||
if member.membership_fee_type_id && member.join_date do
|
||||
generate_fn = fn ->
|
||||
case Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id) do
|
||||
{:ok, _cycles} ->
|
||||
:ok
|
||||
|
||||
{:error, reason} ->
|
||||
require Logger
|
||||
|
||||
Logger.warning(
|
||||
"Failed to generate cycles for member #{member.id}: #{inspect(reason)}"
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
if Application.get_env(:mv, :sql_sandbox, false) do
|
||||
# Run synchronously in test environment for DB sandbox compatibility
|
||||
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
|
||||
generate_fn.()
|
||||
else
|
||||
# Run asynchronously in other environments
|
||||
Task.start(fn ->
|
||||
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
|
||||
end)
|
||||
Task.start(generate_fn)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -180,14 +192,26 @@ defmodule Mv.Membership.Member do
|
|||
Ash.Changeset.changing_attribute?(changeset, :membership_fee_type_id)
|
||||
|
||||
if fee_type_changed && member.membership_fee_type_id && member.join_date do
|
||||
generate_fn = fn ->
|
||||
case Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id) do
|
||||
{:ok, _cycles} ->
|
||||
:ok
|
||||
|
||||
{:error, reason} ->
|
||||
require Logger
|
||||
|
||||
Logger.warning(
|
||||
"Failed to generate cycles for member #{member.id}: #{inspect(reason)}"
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
if Application.get_env(:mv, :sql_sandbox, false) do
|
||||
# Run synchronously in test environment for DB sandbox compatibility
|
||||
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
|
||||
generate_fn.()
|
||||
else
|
||||
# Run asynchronously in other environments
|
||||
Task.start(fn ->
|
||||
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
|
||||
end)
|
||||
Task.start(generate_fn)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue