fix(Update): Ajusta a maneira de realizar o update

This commit is contained in:
Keven Willian Pereira de Souza 2025-10-13 10:43:53 -03:00
parent 349350b03e
commit 88fd24c6b8

View file

@ -1,4 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from packages.v1.administrativo.schemas.t_imovel_unidade_schema import TImovelUnidadeUpdateSchema
from fastapi import HTTPException, status
@ -22,88 +23,25 @@ class TImovelUnidadeUpdateRepository(BaseRepository):
HTTPException: Se o registro não for encontrado ou ocorrer um erro na atualização.
"""
try:
# Dicionário de mapeamento: atributo → coluna SQL
field_map = {
"imovel_unidade_id" : "IMOVEL_UNIDADE_ID",
"imovel_id" : "IMOVEL_ID",
"numero_unidade" : "NUMERO_UNIDADE",
"quadra" : "QUADRA",
"area" : "AREA",
"superquadra" : "SUPERQUADRA",
"conjunto" : "CONJUNTO",
"bloco" : "BLOCO",
"area_descritiva" : "AREA_DESCRITIVA",
"caracteristica" : "CARACTERISTICA",
"reserva_florestal" : "RESERVA_FLORESTAL",
"geo_referenciamento" : "GEO_REFERENCIAMENTO",
"logradouro" : "LOGRADOURO",
"tb_tipologradouro_id" : "TB_TIPOLOGRADOURO_ID",
"selecionado" : "SELECIONADO",
"complemento" : "COMPLEMENTO",
"tipo_imovel" : "TIPO_IMOVEL",
"tipo_construcao" : "TIPO_CONSTRUCAO",
"texto" : "TEXTO",
"numero_edificacao" : "NUMERO_EDIFICACAO",
"iptu" : "IPTU",
"ccir" : "CCIR",
"nirf" : "NIRF",
"lote" : "LOTE",
"torre" : "TORRE",
"nomeloteamento" : "NOMELOTEAMENTO",
"nomecondominio" : "NOMECONDOMINIO",
"numero" : "NUMERO",
"cnm_numero" : "CNM_NUMERO",
"imovel_publico_uniao" : "IMOVEL_PUBLICO_UNIAO",
"spu_rip" : "SPU_RIP",
"cat" : "CAT",
"inscricao_municipal" : "INSCRICAO_MUNICIPAL",
"cib" : "CIB",
"area_construida" : "AREA_CONSTRUIDA",
}
params, update_columns = prepare_update_data(
t_imovel_unidade_update_schema,
exclude_fields=["imovel_unidade_id"],
id_field="imovel_unidade_id"
)
# Lista de campos que serão atualizados
updates = []
params = {}
# Monta dinamicamente os campos presentes no schema
for attr, column in field_map.items():
value = getattr(t_imovel_unidade_update_schema, attr, None)
if value is not None:
updates.append(f"{column} = :{attr}")
params[attr] = value
# Nenhum campo a atualizar?
if not updates:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Nenhum campo válido foi enviado para atualização."
)
# ID obrigatório
params["t_imovel_unidade_id"] = t_imovel_unidade_update_schema.imovel_unidade_id
# Monta o SQL dinâmico
sql = f"""
UPDATE T_IMOVEL_UNIDADE
SET {', '.join(updates)}
WHERE IMOVEL_UNIDADE_ID = :t_imovel_unidade_id
RETURNING *;
"""
UPDATE T_IMOVEL_UNIDADE
SET {update_columns}
WHERE IMOVEL_UNIDADE_ID = :imovel_unidade_id
RETURNING IMOVEL_UNIDADE_ID
"""
# Executa o update
response = self.run_and_return(sql, params)
# Executa a query
result = self.run_and_return(sql, params)
if not result:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Nenhuma unidade de imóvel encontrada para o ID informado."
)
return result
except HTTPException:
# Deixa HTTPException original passar direto
raise
return response
except Exception as e:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,