Add lifetime income/expense totals to UserBalance
New get_user_lifetime_totals_bql() runs tag-filtered BQL queries
(Payable + expense-entry, Receivable + income-entry) to compute
per-user lifetime totals separately from the net balance. Plumbed
through /api/v1/balance and /api/v1/balance/{user_id}; existing
clients keep working (fields default to zero / empty dict).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
483e89163e
commit
deeec7e2c5
3 changed files with 82 additions and 0 deletions
17
views_api.py
17
views_api.py
|
|
@ -1591,22 +1591,34 @@ async def api_get_my_balance(
|
|||
# Add all balances (positive and negative)
|
||||
total_fiat_balances[currency] += amount
|
||||
|
||||
# Super-user totals reflect their personal submissions (if any), not org-wide
|
||||
super_totals = await fava.get_user_lifetime_totals_bql(wallet.wallet.user)
|
||||
|
||||
# Return net position
|
||||
return UserBalance(
|
||||
user_id=wallet.wallet.user,
|
||||
balance=net_balance,
|
||||
accounts=[],
|
||||
fiat_balances=total_fiat_balances,
|
||||
total_expenses_sats=super_totals["total_expenses_sats"],
|
||||
total_expenses_fiat=super_totals["total_expenses_fiat"],
|
||||
total_income_sats=super_totals["total_income_sats"],
|
||||
total_income_fiat=super_totals["total_income_fiat"],
|
||||
)
|
||||
|
||||
# For regular users, show their individual balance from Fava
|
||||
balance_data = await fava.get_user_balance_bql(wallet.wallet.user)
|
||||
totals = await fava.get_user_lifetime_totals_bql(wallet.wallet.user)
|
||||
|
||||
return UserBalance(
|
||||
user_id=wallet.wallet.user,
|
||||
balance=balance_data["balance"],
|
||||
accounts=[], # Could populate from balance_data["accounts"] if needed
|
||||
fiat_balances=balance_data["fiat_balances"],
|
||||
total_expenses_sats=totals["total_expenses_sats"],
|
||||
total_expenses_fiat=totals["total_expenses_fiat"],
|
||||
total_income_sats=totals["total_income_sats"],
|
||||
total_income_fiat=totals["total_income_fiat"],
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -1627,12 +1639,17 @@ async def api_get_user_balance(
|
|||
|
||||
fava = get_fava_client()
|
||||
balance_data = await fava.get_user_balance_bql(user_id)
|
||||
totals = await fava.get_user_lifetime_totals_bql(user_id)
|
||||
|
||||
return UserBalance(
|
||||
user_id=user_id,
|
||||
balance=balance_data["balance"],
|
||||
accounts=[],
|
||||
fiat_balances=balance_data["fiat_balances"],
|
||||
total_expenses_sats=totals["total_expenses_sats"],
|
||||
total_expenses_fiat=totals["total_expenses_fiat"],
|
||||
total_income_sats=totals["total_income_sats"],
|
||||
total_income_fiat=totals["total_income_fiat"],
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue