Spaces:
Running
Running
| from __future__ import annotations | |
| from typing import Any | |
| from fastapi import APIRouter, Request | |
| from pydantic import BaseModel | |
| from app.services import auth_service, trabalhos_tecnicos_service | |
| from app.services.audit_log_service import log_event | |
| router = APIRouter(prefix="/api/trabalhos-tecnicos", tags=["trabalhos_tecnicos"]) | |
| class TrabalhoDetalhePayload(BaseModel): | |
| trabalho_id: str | |
| class TrabalhoImovelEdicaoPayload(BaseModel): | |
| label: str | None = None | |
| endereco: str | None = None | |
| numero: str | None = None | |
| coord_x: float | None = None | |
| coord_y: float | None = None | |
| modelos: list[str] | None = None | |
| class TrabalhoPayloadBase(BaseModel): | |
| nome: str | None = None | |
| tipo_codigo: str | None = None | |
| ano: int | None = None | |
| processos_sei: list[str] | None = None | |
| modelos: list[str] | None = None | |
| imoveis: list[TrabalhoImovelEdicaoPayload] | None = None | |
| class TrabalhoCadastrarPayload(TrabalhoPayloadBase): | |
| pass | |
| class TrabalhoSalvarPayload(TrabalhoPayloadBase): | |
| trabalho_id: str | |
| class TrabalhosMapaPayload(BaseModel): | |
| trabalhos_ids: list[str] | None = None | |
| modo_exibicao: str | None = None | |
| avaliando_lat: float | None = None | |
| avaliando_lon: float | None = None | |
| def listar_trabalhos(request: Request) -> dict[str, Any]: | |
| user = auth_service.require_user(request) | |
| resposta = trabalhos_tecnicos_service.listar_trabalhos() | |
| log_event( | |
| "trabalhos_tecnicos", | |
| "listar_trabalhos", | |
| user=user, | |
| status="ok", | |
| request=request, | |
| details={"total_trabalhos": resposta.get("total_trabalhos")}, | |
| ) | |
| return resposta | |
| def mapa_trabalhos(payload: TrabalhosMapaPayload, request: Request) -> dict[str, Any]: | |
| user = auth_service.require_user(request) | |
| resposta = trabalhos_tecnicos_service.gerar_mapa_trabalhos( | |
| payload.trabalhos_ids, | |
| modo_exibicao=payload.modo_exibicao, | |
| avaliando_lat=payload.avaliando_lat, | |
| avaliando_lon=payload.avaliando_lon, | |
| ) | |
| log_event( | |
| "trabalhos_tecnicos", | |
| "mapa_trabalhos", | |
| user=user, | |
| status="ok", | |
| request=request, | |
| details={ | |
| "total_trabalhos": resposta.get("total_trabalhos"), | |
| "total_imoveis": resposta.get("total_imoveis"), | |
| "modo_exibicao": resposta.get("modo_exibicao"), | |
| }, | |
| ) | |
| return resposta | |
| def detalhar_trabalho(payload: TrabalhoDetalhePayload, request: Request) -> dict[str, Any]: | |
| user = auth_service.require_user(request) | |
| resposta = trabalhos_tecnicos_service.detalhar_trabalho(payload.trabalho_id) | |
| log_event( | |
| "trabalhos_tecnicos", | |
| "detalhar_trabalho", | |
| user=user, | |
| status="ok", | |
| request=request, | |
| details={"trabalho_id": payload.trabalho_id}, | |
| ) | |
| return resposta | |
| def salvar_trabalho(payload: TrabalhoSalvarPayload, request: Request) -> dict[str, Any]: | |
| user = auth_service.require_user(request) | |
| resposta = trabalhos_tecnicos_service.salvar_edicao_trabalho( | |
| payload.trabalho_id, | |
| payload.model_dump(), | |
| actor=str(user.get("usuario") or user.get("nome") or ""), | |
| ) | |
| log_event( | |
| "trabalhos_tecnicos", | |
| "salvar_trabalho", | |
| user=user, | |
| status="ok", | |
| request=request, | |
| details={"trabalho_id": payload.trabalho_id}, | |
| ) | |
| return resposta | |
| def cadastrar_trabalho(payload: TrabalhoCadastrarPayload, request: Request) -> dict[str, Any]: | |
| user = auth_service.require_user(request) | |
| resposta = trabalhos_tecnicos_service.cadastrar_trabalho_tecnico( | |
| payload.model_dump(), | |
| actor=str(user.get("usuario") or user.get("nome") or ""), | |
| ) | |
| trabalho = resposta.get("trabalho") if isinstance(resposta, dict) else {} | |
| log_event( | |
| "trabalhos_tecnicos", | |
| "cadastrar_trabalho", | |
| user=user, | |
| status="ok", | |
| request=request, | |
| details={"trabalho_id": trabalho.get("id") if isinstance(trabalho, dict) else None}, | |
| ) | |
| return resposta | |