CARONTE v1.0 - Plataforma de Gestão Social

This commit is contained in:
2026-02-08 23:10:32 -03:00
commit c98c806865
60 changed files with 9450 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from app.core.database import get_db
from app.core.security import get_current_user_id
from app.models.checklist import ChecklistItem
from app.schemas.schemas import ChecklistItemOut, ChecklistUpdateStatus
from app.services.checklist_engine import get_proximo_passo
router = APIRouter(prefix="/familias/{familia_id}/checklist", tags=["checklist"])
@router.get("/", response_model=list[ChecklistItemOut])
async def listar(familia_id: int, db: AsyncSession = Depends(get_db)):
result = await db.execute(
select(ChecklistItem).where(ChecklistItem.familia_id == familia_id).order_by(ChecklistItem.ordem)
)
return result.scalars().all()
@router.put("/{item_id}", response_model=ChecklistItemOut)
async def atualizar_status(familia_id: int, item_id: int, data: ChecklistUpdateStatus, db: AsyncSession = Depends(get_db)):
result = await db.execute(select(ChecklistItem).where(ChecklistItem.id == item_id, ChecklistItem.familia_id == familia_id))
item = result.scalar_one_or_none()
if not item:
raise HTTPException(404, "Item não encontrado")
item.status = data.status
await db.commit()
await db.refresh(item)
return item
@router.get("/proximo", response_model=ChecklistItemOut | None)
async def proximo_passo(familia_id: int, db: AsyncSession = Depends(get_db)):
result = await db.execute(
select(ChecklistItem).where(ChecklistItem.familia_id == familia_id).order_by(ChecklistItem.ordem)
)
items = [{"id": i.id, "status": i.status, "ordem": i.ordem, "titulo": i.titulo, "descricao": i.descricao,
"fase": i.fase, "categoria": i.categoria, "prazo_dias": i.prazo_dias, "familia_id": i.familia_id,
"falecido_id": i.falecido_id, "dependencia_id": i.dependencia_id} for i in result.scalars().all()]
p = get_proximo_passo(items)
if not p:
return None
return p