mesa-react / backend /app /api /trabalhos_tecnicos.py
Guilherme Silberfarb Costa
alteracoes generalizadas v2
8539524
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
@router.get("")
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
@router.post("/mapa")
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
@router.post("/detalhe")
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
@router.post("/salvar")
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
@router.post("/cadastrar")
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