Spaces:
Running
Running
| from __future__ import annotations | |
| import os | |
| from typing import Any | |
| from fastapi import APIRouter, File, Form, Request, UploadFile | |
| from fastapi.responses import FileResponse | |
| from pydantic import BaseModel | |
| from app.services import auth_service, elaboracao_service, visualizacao_service | |
| from app.services.audit_log_service import log_event | |
| from app.services.session_store import session_store | |
| router = APIRouter(prefix="/api/visualizacao", tags=["visualizacao"]) | |
| class SessionPayload(BaseModel): | |
| session_id: str | |
| class MapaPayload(SessionPayload): | |
| variavel_mapa: str | None = None | |
| class AvaliacaoPayload(SessionPayload): | |
| valores_x: dict[str, Any] | |
| indice_base: str | None = None | |
| class AvaliacaoKnnDetalhesPayload(SessionPayload): | |
| valores_x: dict[str, Any] | |
| class AvaliacaoDeletePayload(SessionPayload): | |
| indice: str | None = None | |
| indice_base: str | None = None | |
| class AvaliacaoBasePayload(SessionPayload): | |
| indice_base: str | None = None | |
| class RepositorioModeloPayload(SessionPayload): | |
| modelo_id: str | |
| async def upload_file( | |
| session_id: str = Form(...), | |
| file: UploadFile = File(...), | |
| ) -> dict[str, Any]: | |
| session = session_store.get(session_id) | |
| conteudo = await file.read() | |
| caminho = elaboracao_service.save_uploaded_file(session, file.filename, conteudo) | |
| return visualizacao_service.carregar_modelo(session, caminho) | |
| def repositorio_modelos(request: Request) -> dict[str, Any]: | |
| user = auth_service.require_user(request) | |
| resposta = visualizacao_service.listar_modelos_repositorio() | |
| log_event( | |
| "repositorio", | |
| "listar_modelos_visualizacao", | |
| user=user, | |
| request=request, | |
| details={"total_modelos": resposta.get("total_modelos")}, | |
| ) | |
| return resposta | |
| def repositorio_carregar(payload: RepositorioModeloPayload, request: Request) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| user = auth_service.require_user(request) | |
| resposta = visualizacao_service.carregar_modelo_repositorio(session, payload.modelo_id) | |
| log_event( | |
| "repositorio", | |
| "carregar_modelo_visualizacao", | |
| user=user, | |
| session_id=payload.session_id, | |
| request=request, | |
| details={"modelo_id": payload.modelo_id}, | |
| ) | |
| return resposta | |
| def exibir(payload: SessionPayload) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| return visualizacao_service.exibir_modelo(session) | |
| def evaluation_context(payload: SessionPayload) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| return visualizacao_service.exibir_contexto_avaliacao(session) | |
| def map_update(payload: MapaPayload) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| return visualizacao_service.atualizar_mapa(session, payload.variavel_mapa) | |
| def evaluation_fields(payload: SessionPayload) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| return {"campos": visualizacao_service.campos_avaliacao(session)} | |
| def evaluation_calculate(payload: AvaliacaoPayload, request: Request) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| user = auth_service.require_user(request) | |
| resposta = visualizacao_service.calcular_avaliacao(session, payload.valores_x, payload.indice_base) | |
| log_event( | |
| "visualizacao", | |
| "avaliacao_calcular", | |
| user=user, | |
| session_id=payload.session_id, | |
| request=request, | |
| details={"total_avaliacoes": len(resposta.get("avaliacoes") or [])}, | |
| ) | |
| return resposta | |
| def evaluation_knn_details(payload: AvaliacaoKnnDetalhesPayload, request: Request) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| user = auth_service.require_user(request) | |
| resposta = visualizacao_service.detalhes_knn_avaliacao(session, payload.valores_x) | |
| log_event( | |
| "visualizacao", | |
| "avaliacao_knn_detalhes", | |
| user=user, | |
| session_id=payload.session_id, | |
| request=request, | |
| ) | |
| return resposta | |
| def evaluation_clear(payload: SessionPayload) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| return visualizacao_service.limpar_avaliacoes(session) | |
| def evaluation_delete(payload: AvaliacaoDeletePayload) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| return visualizacao_service.excluir_avaliacao(session, payload.indice, payload.indice_base) | |
| def evaluation_base(payload: AvaliacaoBasePayload) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| return visualizacao_service.atualizar_base(session, payload.indice_base) | |
| def evaluation_export(session_id: str) -> FileResponse: | |
| session = session_store.get(session_id) | |
| caminho = visualizacao_service.exportar_avaliacoes(session) | |
| return FileResponse( | |
| path=caminho, | |
| media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", | |
| filename=os.path.basename(caminho), | |
| ) | |
| def equation_export(session_id: str, mode: str = "excel") -> FileResponse: | |
| session = session_store.get(session_id) | |
| caminho, nome = visualizacao_service.exportar_equacao(session, mode) | |
| return FileResponse( | |
| path=caminho, | |
| media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", | |
| filename=nome, | |
| ) | |
| def clear(payload: SessionPayload) -> dict[str, Any]: | |
| session = session_store.get(payload.session_id) | |
| return visualizacao_service.limpar_tudo_visualizacao(session) | |