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
|
# but in test environment it runs synchronously for DB sandbox compatibility
|
||||||
change after_action(fn _changeset, member, _context ->
|
change after_action(fn _changeset, member, _context ->
|
||||||
if member.membership_fee_type_id && member.join_date do
|
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
|
if Application.get_env(:mv, :sql_sandbox, false) do
|
||||||
# Run synchronously in test environment for DB sandbox compatibility
|
# Run synchronously in test environment for DB sandbox compatibility
|
||||||
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
|
generate_fn.()
|
||||||
else
|
else
|
||||||
# Run asynchronously in other environments
|
# Run asynchronously in other environments
|
||||||
Task.start(fn ->
|
Task.start(generate_fn)
|
||||||
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -180,14 +192,26 @@ defmodule Mv.Membership.Member do
|
||||||
Ash.Changeset.changing_attribute?(changeset, :membership_fee_type_id)
|
Ash.Changeset.changing_attribute?(changeset, :membership_fee_type_id)
|
||||||
|
|
||||||
if fee_type_changed && member.membership_fee_type_id && member.join_date do
|
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
|
if Application.get_env(:mv, :sql_sandbox, false) do
|
||||||
# Run synchronously in test environment for DB sandbox compatibility
|
# Run synchronously in test environment for DB sandbox compatibility
|
||||||
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
|
generate_fn.()
|
||||||
else
|
else
|
||||||
# Run asynchronously in other environments
|
# Run asynchronously in other environments
|
||||||
Task.start(fn ->
|
Task.start(generate_fn)
|
||||||
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue