42 lines
2.0 KiB
Python
42 lines
2.0 KiB
Python
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
|