Fix cashflow endpoint: pass date object instead of integer to SQL

asyncpg infers :days as an integer, causing a 'date >= integer' type
error in PostgreSQL. Compute the cutoff date in Python and bind it as
a date parameter instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
megaproxy 2026-04-28 10:45:57 +00:00
parent 4572621f5d
commit a7e58d6aa1

View file

@ -1,5 +1,7 @@
from __future__ import annotations
from datetime import date, timedelta
import pandas as pd
from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession
@ -97,6 +99,7 @@ async def get_portfolio_monthly_returns(db: AsyncSession, user_id: str) -> pd.Da
async def get_daily_cash_flow(db: AsyncSession, user_id: str, days: int = 90) -> pd.DataFrame:
cutoff = date.today() - timedelta(days=days)
result = await db.execute(text("""
SELECT
t.date::date AS ds,
@ -107,10 +110,10 @@ async def get_daily_cash_flow(db: AsyncSession, user_id: str, days: int = 90) ->
AND t.deleted_at IS NULL
AND t.status != 'void'
AND t.type IN ('income', 'expense')
AND t.date >= CURRENT_DATE - :days
AND t.date >= :cutoff
GROUP BY t.date
ORDER BY t.date ASC
"""), {"uid": str(user_id), "days": days})
"""), {"uid": str(user_id), "cutoff": cutoff})
rows = result.fetchall()
if not rows:
return pd.DataFrame(columns=["ds", "inflow", "outflow"])