CARONTE v1.0 - Plataforma de Gestão Social
This commit is contained in:
41
backend/app/api/v1/checklist.py
Normal file
41
backend/app/api/v1/checklist.py
Normal 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
|
||||
Reference in New Issue
Block a user