Spaces:
Sleeping
Sleeping
| 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 | |
| def modelos(request: Request) -> dict[str, Any]: | |
| auth_service.require_user(request) | |
| return anexos_service.listar_modelos() | |
| def modelo_colunas(modelo_id: str, request: Request) -> dict[str, Any]: | |
| auth_service.require_user(request) | |
| return anexos_service.obter_colunas(modelo_id) | |
| 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, | |
| } | |
| 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"}, | |
| ) | |