docs: correct load_cycles_for_members documentation
Document that function loads all cycles, not just relevant ones, as no database-level filtering is currently implemented.
This commit is contained in:
parent
5318b2c07d
commit
ee6589c4fa
1 changed files with 11 additions and 9 deletions
|
|
@ -15,13 +15,14 @@ defmodule MvWeb.MemberLive.Index.MembershipFeeStatus do
|
||||||
Loads membership fee cycles for members efficiently.
|
Loads membership fee cycles for members efficiently.
|
||||||
|
|
||||||
Preloads cycles with membership_fee_type relationship to avoid N+1 queries.
|
Preloads cycles with membership_fee_type relationship to avoid N+1 queries.
|
||||||
Only loads the relevant cycle per member (last completed or current, depending on show_current).
|
Note: This loads all cycles for each member. The filtering to get the relevant
|
||||||
|
cycle (current or last completed) happens in `get_cycle_status_for_member/2`.
|
||||||
|
|
||||||
## Parameters
|
## Parameters
|
||||||
|
|
||||||
- `query` - Ash query for members
|
- `query` - Ash query for members
|
||||||
- `show_current` - If true, load current cycle; if false, load last completed cycle
|
- `show_current` - If true, get current cycle status; if false, get last completed cycle status (currently unused, kept for API compatibility)
|
||||||
- `today` - Optional date to use as reference (defaults to today)
|
- `today` - Optional date to use as reference (currently unused, kept for API compatibility)
|
||||||
|
|
||||||
## Returns
|
## Returns
|
||||||
|
|
||||||
|
|
@ -30,11 +31,11 @@ defmodule MvWeb.MemberLive.Index.MembershipFeeStatus do
|
||||||
## Performance
|
## Performance
|
||||||
|
|
||||||
Uses Ash.Query.load to efficiently preload cycles in a single query.
|
Uses Ash.Query.load to efficiently preload cycles in a single query.
|
||||||
Filters cycles at database level to only load the relevant cycle per member.
|
All cycles are loaded; filtering happens in memory in `get_cycle_status_for_member/2`.
|
||||||
"""
|
"""
|
||||||
@spec load_cycles_for_members(Ash.Query.t(), boolean(), Date.t() | nil) :: Ash.Query.t()
|
@spec load_cycles_for_members(Ash.Query.t(), boolean(), Date.t() | nil) :: Ash.Query.t()
|
||||||
def load_cycles_for_members(query, _show_current \\ false, _today \\ nil) do
|
def load_cycles_for_members(query, _show_current \\ false, _today \\ nil) do
|
||||||
# Load membership_fee_type and cycles with efficient filtering
|
# Load membership_fee_type and cycles
|
||||||
query
|
query
|
||||||
|> Ash.Query.load([:membership_fee_type, membership_fee_cycles: [:membership_fee_type]])
|
|> Ash.Query.load([:membership_fee_type, membership_fee_cycles: [:membership_fee_type]])
|
||||||
end
|
end
|
||||||
|
|
@ -65,13 +66,14 @@ defmodule MvWeb.MemberLive.Index.MembershipFeeStatus do
|
||||||
iex> MvWeb.MemberLive.Index.MembershipFeeStatus.get_cycle_status_for_member(member, true)
|
iex> MvWeb.MemberLive.Index.MembershipFeeStatus.get_cycle_status_for_member(member, true)
|
||||||
:unpaid
|
:unpaid
|
||||||
"""
|
"""
|
||||||
@spec get_cycle_status_for_member(Member.t(), boolean()) :: :paid | :unpaid | :suspended | nil
|
@spec get_cycle_status_for_member(Member.t(), boolean(), Date.t() | nil) ::
|
||||||
def get_cycle_status_for_member(member, show_current \\ false) do
|
:paid | :unpaid | :suspended | nil
|
||||||
|
def get_cycle_status_for_member(member, show_current \\ false, today \\ nil) do
|
||||||
cycle =
|
cycle =
|
||||||
if show_current do
|
if show_current do
|
||||||
MembershipFeeHelpers.get_current_cycle(member)
|
MembershipFeeHelpers.get_current_cycle(member, today)
|
||||||
else
|
else
|
||||||
MembershipFeeHelpers.get_last_completed_cycle(member)
|
MembershipFeeHelpers.get_last_completed_cycle(member, today)
|
||||||
end
|
end
|
||||||
|
|
||||||
case cycle do
|
case cycle do
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue