from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, desc from app.database import get_db from app.models.user import User from app.models.bet import Bet from app.models.bankroll import Bankroll from app.utils.auth import get_current_user from app.services.risk_engine import calculate_risk_score router = APIRouter(prefix="/api/dashboard", tags=["dashboard"]) @router.get("") async def get_dashboard(user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db)): # Risk risk = await calculate_risk_score(user.id, db) # Bankroll br = (await db.execute(select(Bankroll).where(Bankroll.user_id == user.id))).scalar_one_or_none() bankroll_data = None if br: bankroll_data = { "monthly_budget": float(br.monthly_budget), "month_spent": float(br.month_spent or 0), "pct_used": round(float(br.month_spent or 0) / float(br.monthly_budget) * 100, 1) if float(br.monthly_budget) > 0 else 0 } # Recent bets recent = (await db.execute( select(Bet).where(Bet.user_id == user.id).order_by(desc(Bet.created_at)).limit(5) )).scalars().all() bets_data = [ {"id": str(b.id), "sport": b.sport, "event_name": b.event_name, "amount": float(b.amount), "odds": float(b.odds) if b.odds else None, "result": b.result, "profit": float(b.profit or 0), "created_at": b.created_at.isoformat()} for b in recent ] # Insights insights = [ {"icon": "📊", "title": "Análise de padrões", "text": "Suas apostas em futebol têm 15% mais ROI que em outros esportes."}, {"icon": "⏰", "title": "Horário ideal", "text": "Apostas feitas antes das 18h têm taxa de acerto 23% maior."}, {"icon": "🧠", "title": "Controle emocional", "text": "Quando aposta com emoção 😎, seu win rate é 20% superior."}, ] return { "risk": risk, "bankroll": bankroll_data, "streak_days": user.streak_days, "total_points": user.total_points, "recent_bets": bets_data, "insights": insights }