CARONTE v1.0 - Plataforma de Gestão Social
This commit is contained in:
54
backend/app/api/v1/dashboard.py
Normal file
54
backend/app/api/v1/dashboard.py
Normal file
@@ -0,0 +1,54 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select, func
|
||||
from app.core.database import get_db
|
||||
from app.core.security import get_current_user_id
|
||||
from app.models.familia import Familia
|
||||
from app.models.checklist import ChecklistItem
|
||||
from app.models.beneficio import Beneficio
|
||||
from app.models.documento import Documento
|
||||
from app.schemas.schemas import DashboardOut
|
||||
|
||||
router = APIRouter(prefix="/dashboard", tags=["dashboard"])
|
||||
|
||||
@router.get("/", response_model=DashboardOut)
|
||||
async def dashboard(user_id: int = Depends(get_current_user_id), db: AsyncSession = Depends(get_db)):
|
||||
fams = await db.execute(select(Familia).where(Familia.usuario_id == user_id))
|
||||
familias = fams.scalars().all()
|
||||
fam_ids = [f.id for f in familias]
|
||||
|
||||
pendentes = 0
|
||||
bens_count = 0
|
||||
docs_count = 0
|
||||
fam_list = []
|
||||
|
||||
for fam in familias:
|
||||
ch = await db.execute(select(ChecklistItem).where(ChecklistItem.familia_id == fam.id))
|
||||
items = ch.scalars().all()
|
||||
total = len(items)
|
||||
done = len([i for i in items if i.status == "concluido"])
|
||||
pendentes += len([i for i in items if i.status == "pendente"])
|
||||
|
||||
bn = await db.execute(select(func.count()).select_from(Beneficio).where(Beneficio.familia_id == fam.id))
|
||||
bc = bn.scalar() or 0
|
||||
bens_count += bc
|
||||
|
||||
dc = await db.execute(select(func.count()).select_from(Documento).where(Documento.familia_id == fam.id))
|
||||
docs_count += dc.scalar() or 0
|
||||
|
||||
fam_list.append({
|
||||
"id": fam.id,
|
||||
"nome": fam.nome,
|
||||
"total_items": total,
|
||||
"concluidos": done,
|
||||
"progresso": round(done / total * 100) if total else 0,
|
||||
"beneficios": bc,
|
||||
})
|
||||
|
||||
return DashboardOut(
|
||||
familias_ativas=len(familias),
|
||||
itens_pendentes=pendentes,
|
||||
beneficios_encontrados=bens_count,
|
||||
documentos_gerados=docs_count,
|
||||
familias=fam_list,
|
||||
)
|
||||
Reference in New Issue
Block a user