Initial commit - MIDAS App educação financeira para apostadores (FastAPI + Next.js)
This commit is contained in:
53
backend/app/routers/dashboard.py
Normal file
53
backend/app/routers/dashboard.py
Normal file
@@ -0,0 +1,53 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user