mesa-react / backend /app /api /anexos.py
Guilherme Silberfarb Costa
alteracoes nos mapas e no carregamento de planilha
fef776b
Raw
History Blame Contribute Delete
2.12 kB
from __future__ import annotations
from typing import Any
from fastapi import APIRouter, Request
from fastapi.responses import FileResponse
from pydantic import BaseModel, Field
from app.services import anexos_service, auth_service
from app.services.audit_log_service import log_event
router = APIRouter(prefix="/api/anexos", tags=["anexos"])
class GerarAnexosPayload(BaseModel):
modelo_id: str = Field(..., min_length=1)
banco_dados_colunas: list[str] | None = None
avaliacao: dict[str, Any] | None = None
@router.get("/modelos")
def modelos(request: Request) -> dict[str, Any]:
auth_service.require_user(request)
return anexos_service.listar_modelos()
@router.get("/modelos/{modelo_id}/columns")
def modelo_colunas(modelo_id: str, request: Request) -> dict[str, Any]:
auth_service.require_user(request)
return anexos_service.obter_colunas(modelo_id)
@router.post("/generate")
def gerar(payload: GerarAnexosPayload, request: Request) -> dict[str, Any]:
user = auth_service.require_user(request)
caminho, avisos = anexos_service.gerar_documento(
payload.modelo_id,
banco_dados_colunas=payload.banco_dados_colunas,
avaliacao=payload.avaliacao,
)
log_event(
"visualizacao",
"gerar_anexos_modelo",
user=user,
request=request,
details={
"modelo_id": payload.modelo_id,
"com_avaliacao": bool(payload.avaliacao),
"total_colunas": len(payload.banco_dados_colunas or []),
},
)
return {
"message": f"Anexos gerados com sucesso: {caminho.name}",
"filename": caminho.name,
"statistical_warnings": avisos,
}
@router.get("/download/{filename}")
def download(filename: str, request: Request) -> FileResponse:
auth_service.require_user(request)
caminho = anexos_service.resolver_download(filename)
return FileResponse(
path=caminho,
filename=caminho.name,
media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
headers={"Cache-Control": "no-store"},
)