[MVPTN-100] feat(CRUD): Implementa endpoints para maniputar T_PEssoa_Representante
This commit is contained in:
parent
4a48001fef
commit
2f1461d1e0
19 changed files with 870 additions and 1 deletions
|
|
@ -0,0 +1,26 @@
|
|||
from abstracts.action import BaseAction
|
||||
from api.packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_delete_repository import TPessoaRepresentanteDeleteRepository
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteIdSchema
|
||||
|
||||
|
||||
class TPessoaRepresentanteDeleteAction(BaseAction):
|
||||
"""
|
||||
Serviço responsável por encapsular a lógica de negócio para a operação
|
||||
de exclusão de um registro na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_id_schema: TPessoaRepresentanteIdSchema):
|
||||
"""
|
||||
Executa a operação de exclusão no banco de dados.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensIdSchema): O esquema com o ID a ser excluído.
|
||||
|
||||
Returns:
|
||||
O resultado da operação de exclusão.
|
||||
"""
|
||||
# Instanciamento do repositório
|
||||
t_pessoa_representante_delete_repository = TPessoaRepresentanteDeleteRepository()
|
||||
|
||||
# Execução do repositório
|
||||
return t_pessoa_representante_delete_repository.execute(t_pessoa_representante_id_schema)
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
from api.abstracts.action import BaseAction
|
||||
from api.packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_index_repository import TPessoaRepresentanteIndexRepository
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentantePessoaIdSchema
|
||||
|
||||
|
||||
class TPessoaRepresentanteIndexAction(BaseAction):
|
||||
"""
|
||||
Serviço responsável por encapsular a lógica de negócio para a operação
|
||||
de listagem de todos os registros na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_pessoa_id_schema: TPessoaRepresentantePessoaIdSchema):
|
||||
"""
|
||||
Executa a operação de listagem no banco de dados.
|
||||
|
||||
Returns:
|
||||
A lista de todos os registros.
|
||||
"""
|
||||
# Instanciamento do repositório
|
||||
t_pessoa_representante_index_repository = TPessoaRepresentanteIndexRepository()
|
||||
|
||||
# Execução do repositório
|
||||
response = t_pessoa_representante_index_repository.execute(t_pessoa_representante_pessoa_id_schema)
|
||||
|
||||
# Retorno da informação
|
||||
return response
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
from abstracts.action import BaseAction
|
||||
from api.packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_save_repository import TPessoaRepresentanteSaveRepository
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteSaveSchema
|
||||
|
||||
class TPessoaRepresentanteSaveAction(BaseAction):
|
||||
"""
|
||||
Serviço responsável por encapsular a lógica de negócio para a operação
|
||||
de salvar um novo registro na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_save_schema: TPessoaRepresentanteSaveSchema):
|
||||
"""
|
||||
Executa a operação de salvamento.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensSaveSchema): O esquema com os dados a serem salvos.
|
||||
|
||||
Returns:
|
||||
O resultado da operação de salvamento.
|
||||
"""
|
||||
# Instânciamento do repositório
|
||||
t_pessoa_representante_save_repository = TPessoaRepresentanteSaveRepository()
|
||||
|
||||
# Execução do repositório
|
||||
response = t_pessoa_representante_save_repository.execute(t_pessoa_representante_save_schema)
|
||||
|
||||
# Retorno da informação
|
||||
return response
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
from abstracts.action import BaseAction
|
||||
from api.packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_delete_repository import TPessoaRepresentanteIdSchema
|
||||
from api.packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_show_repository import TPessoaRepresentanteShowRepository
|
||||
|
||||
class TPessoaRepresentanteShowAction(BaseAction):
|
||||
"""
|
||||
Serviço responsável por encapsular a lógica de negócio para a exibição
|
||||
de um registro na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_id_schema: TPessoaRepresentanteIdSchema):
|
||||
"""
|
||||
Executa a operação de exibição.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensIdSchema): O esquema com o ID do registro a ser exibido.
|
||||
|
||||
Returns:
|
||||
O resultado da operação de exibição.
|
||||
"""
|
||||
# Instânciamento do repositório
|
||||
t_pessoa_representante_show_repository = TPessoaRepresentanteShowRepository()
|
||||
|
||||
# Execução do repositório
|
||||
response = t_pessoa_representante_show_repository.execute(t_pessoa_representante_id_schema)
|
||||
|
||||
# Retorno da informação
|
||||
return response
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
from api.abstracts.action import BaseAction
|
||||
from api.packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_update_repository import TPessoaRepresentanteUpdateRepository
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteUpdateSchema
|
||||
|
||||
|
||||
class TPessoaRepresentanteUpdateAction(BaseAction):
|
||||
"""
|
||||
Service responsável por encapsular a lógica de negócio para a atualização
|
||||
de um registro na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representanteupdate_schema: TPessoaRepresentanteUpdateSchema):
|
||||
"""
|
||||
Executa a operação de atualização.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensUpdateSchema): O esquema com os dados a serem atualizados.
|
||||
|
||||
Returns:
|
||||
O resultado da operação de atualização.
|
||||
"""
|
||||
# Instância o repositório de atualização
|
||||
t_pessoa_representanteupdate_repository = TPessoaRepresentanteUpdateRepository()
|
||||
|
||||
# Chama o método de execução do repositório para realizar a atualização
|
||||
return t_pessoa_representanteupdate_repository.execute(t_pessoa_representanteupdate_schema)
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
from actions.dynamic_import.dynamic_import import DynamicImport
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteIdSchema, TPessoaRepresentantePessoaIdSchema, TPessoaRepresentanteSaveSchema, TPessoaRepresentanteUpdateSchema
|
||||
|
||||
class TPessoaRepresentanteController:
|
||||
|
||||
def __init__(self):
|
||||
# Action responsável por carregar as services de acordo com o estado
|
||||
self.dynamic_import = DynamicImport()
|
||||
|
||||
# Define o pacote que deve ser carregado
|
||||
self.dynamic_import.set_package("administrativo")
|
||||
|
||||
# Define a tabela que o pacote pertence
|
||||
self.dynamic_import.set_table("t_pessoa_representante")
|
||||
pass
|
||||
|
||||
# Lista todos os regimes de bens
|
||||
def index(self, t_pessoa_representante_pessoa_id_schema : TPessoaRepresentantePessoaIdSchema):
|
||||
|
||||
# Importação da classe desejada
|
||||
t_pessoa_representante_index_service = self.dynamic_import.service("t_pessoa_representante_index_service", "TPessoaRepresentanteIndexService")
|
||||
|
||||
# Instância da classe service
|
||||
self.t_pessoa_representante_index_service = t_pessoa_representante_index_service()
|
||||
|
||||
# Lista todos os regimes de bens
|
||||
return {
|
||||
'message': 'Pessoas localizados com sucesso',
|
||||
'data': self.t_pessoa_representante_index_service.execute(t_pessoa_representante_pessoa_id_schema)
|
||||
}
|
||||
|
||||
|
||||
# Busca um regime de bens específico pelo ID
|
||||
def show(self, t_pessoa_representante_id_schema : TPessoaRepresentanteIdSchema):
|
||||
|
||||
#Importação da classe desejada
|
||||
t_pessoa_representante_show_service = self.dynamic_import.service('t_pessoa_representante_show_service', 'TPessoaRepresentanteShowService')
|
||||
|
||||
# Instância da classe desejada
|
||||
self.t_pessoa_representante_show_service = t_pessoa_representante_show_service()
|
||||
|
||||
# Busca e retorna o regime de bens desejado
|
||||
return {
|
||||
'message' : 'Pessoa localizado com sucesso',
|
||||
'data': self.t_pessoa_representante_show_service.execute(t_pessoa_representante_id_schema)
|
||||
}
|
||||
|
||||
# Cadastra um novo regime de bens
|
||||
def save(self, t_pessoa_representante_save_schema : TPessoaRepresentanteSaveSchema):
|
||||
|
||||
#Importação da classe desejada
|
||||
t_pessoa_representante_save_service = self.dynamic_import.service('t_pessoa_representante_save_service', 'TPessoaRepresentanteSaveService')
|
||||
|
||||
# Instância da classe desejada
|
||||
self.t_pessoa_representante_save_service = t_pessoa_representante_save_service()
|
||||
# Busca e retorna o regime de bens desejado
|
||||
return {
|
||||
'message' : 'Pessoa salvo com sucesso',
|
||||
'data': self.t_pessoa_representante_save_service.execute(t_pessoa_representante_save_schema)
|
||||
}
|
||||
|
||||
# Atualiza os dados de um regime de bens
|
||||
def update(self, t_pessoa_representante_update_schame : TPessoaRepresentanteUpdateSchema):
|
||||
|
||||
#Importação da classe desejada
|
||||
t_pessoa_representante_update_service = self.dynamic_import.service('t_pessoa_representante_update_service', 'TPessoaRepresentanteUpdateService')
|
||||
|
||||
# Instância da classe desejada
|
||||
self.t_pessoa_representante_update_service = t_pessoa_representante_update_service()
|
||||
|
||||
# Busca e retorna o regime de bens desejado
|
||||
return {
|
||||
'message' : 'Pessoa atualizado com sucesso',
|
||||
'data': self.t_pessoa_representante_update_service.execute(t_pessoa_representante_update_schame)
|
||||
}
|
||||
|
||||
# Exclui um regime de bens
|
||||
def delete(self, t_pessoa_representante_id_schema : TPessoaRepresentanteIdSchema):
|
||||
|
||||
#Importação da classe desejada
|
||||
t_pessoa_representante_delete_service = self.dynamic_import.service('t_pessoa_representante_delete_service', 'TPessoaRepresentanteDeleteService')
|
||||
|
||||
# Instância da classe desejada
|
||||
self.t_pessoa_representante_delete_service = t_pessoa_representante_delete_service()
|
||||
|
||||
# Busca e retorna o regime de bens desejado
|
||||
return {
|
||||
'message' : 'Pessoa removido com sucesso',
|
||||
'data': self.t_pessoa_representante_delete_service.execute(t_pessoa_representante_id_schema)
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
# Importação de bibliotecas
|
||||
from fastapi import APIRouter, Depends, status
|
||||
from actions.jwt.get_current_user import get_current_user
|
||||
from api.packages.v1.administrativo.controllers.t_pessoa_representante_controller import TPessoaRepresentanteController
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteIdSchema, TPessoaRepresentantePessoaIdSchema, TPessoaRepresentanteSaveSchema, TPessoaRepresentanteUpdateSchema
|
||||
|
||||
# Inicializa o roteador para as rotas do regime de bens
|
||||
router = APIRouter()
|
||||
|
||||
# Instânciamento do controller desejado
|
||||
t_pessoa_representante_controller = TPessoaRepresentanteController()
|
||||
|
||||
# Lista todos as pessoas
|
||||
@router.get('/pessoa/{pessoa_id}',
|
||||
status_code=status.HTTP_200_OK,
|
||||
summary='Lista todos as pessoas cadastrados',
|
||||
response_description='Lista todos as pessoas cadastrados')
|
||||
async def index(pessoa_id : int, current_user: dict = Depends(get_current_user)):
|
||||
|
||||
# Cria o schema com os dados recebidos
|
||||
t_pessoa_representante_pessoa_id_schema = TPessoaRepresentantePessoaIdSchema(pessoa_id=pessoa_id)
|
||||
|
||||
# Busca todos as pessoas cadastrados
|
||||
response = t_pessoa_representante_controller.index(t_pessoa_representante_pessoa_id_schema)
|
||||
|
||||
# Retorna os dados localizados
|
||||
return response
|
||||
|
||||
# Localiza um regime de bens pelo ID
|
||||
@router.get('/{pessoa_representante_id}',
|
||||
status_code=status.HTTP_200_OK,
|
||||
summary='Busca um registro em específico pelo ID da pessoa',
|
||||
response_description='Busca um registro em específico')
|
||||
async def show(pessoa_representante_id : int, current_user: dict = Depends(get_current_user)):
|
||||
|
||||
# Cria o schema com os dados recebidos
|
||||
t_pessoa_representante_id_schema = TPessoaRepresentanteIdSchema(pessoa_representante_id=pessoa_representante_id)
|
||||
|
||||
# Busca um regime de bens específico pelo ID
|
||||
response = t_pessoa_representante_controller.show(t_pessoa_representante_id_schema)
|
||||
|
||||
# Retorna os dados localizados
|
||||
return response
|
||||
|
||||
|
||||
# Cadastro de regime de bens
|
||||
@router.post('/',
|
||||
status_code=status.HTTP_201_CREATED,
|
||||
summary='Cadastra um regime de bens',
|
||||
response_description='Cadastra um regime de bens')
|
||||
async def save(t_pessoa_representante_save_schema : TPessoaRepresentanteSaveSchema, current_user: dict = Depends(get_current_user)):
|
||||
|
||||
# Efetua o cadastro no banco de dados
|
||||
response = t_pessoa_representante_controller.save(t_pessoa_representante_save_schema)
|
||||
|
||||
# Retorna os dados localizados
|
||||
return response
|
||||
|
||||
|
||||
# Atualiza os dados de um regime de bens
|
||||
@router.put('/{pessoa_id}',
|
||||
status_code=status.HTTP_200_OK,
|
||||
summary='Atualiza um regime de bens',
|
||||
response_description='Atualiza um regime de bens')
|
||||
async def update(pessoa_id : int, t_pessoa_representante_update_schema : TPessoaRepresentanteUpdateSchema, current_user: dict = Depends(get_current_user)):
|
||||
|
||||
# Adiciona o ID do registro ao schema
|
||||
t_pessoa_representante_update_schema.pessoa_id = pessoa_id
|
||||
|
||||
# Efetua a atualização dos dados
|
||||
response = t_pessoa_representante_controller.update(t_pessoa_representante_update_schema)
|
||||
|
||||
# Retorna os dados localizados
|
||||
return response
|
||||
|
||||
# Exclui um determinado regime de bens
|
||||
@router.delete('/{pessoa_representante_id}',
|
||||
status_code=status.HTTP_200_OK,
|
||||
summary='Remove um regime de bens',
|
||||
response_description='Remove um regime de bens')
|
||||
async def delete(pessoa_representante_id : int, current_user: dict = Depends(get_current_user)):
|
||||
|
||||
# Cria o schema com os dados recebidos
|
||||
t_pessoa_representante_id_schema = TPessoaRepresentanteIdSchema(pessoa_representante_id=pessoa_representante_id)
|
||||
|
||||
# Efetua a exclusão do regime de bens
|
||||
response = t_pessoa_representante_controller.delete(t_pessoa_representante_id_schema)
|
||||
|
||||
# Retorna os dados localizados
|
||||
return response
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
from abstracts.repository import BaseRepository
|
||||
from fastapi import HTTPException, status
|
||||
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteIdSchema
|
||||
|
||||
|
||||
class TPessoaRepresentanteDeleteRepository(BaseRepository):
|
||||
"""
|
||||
Repositório para a operação de exclusão de um registro na tabela
|
||||
g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_id_schema: TPessoaRepresentanteIdSchema):
|
||||
"""
|
||||
Executa a consulta SQL para remover um registro pelo ID.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensIdSchema): O esquema com o ID a ser removido.
|
||||
|
||||
Returns:
|
||||
O resultado da operação de exclusão.
|
||||
"""
|
||||
try:
|
||||
# Montagem do sql
|
||||
sql = """ DELETE FROM T_PESSOA_REPRESENTANTE TPR WHERE TPR.PESSOA_REPRESENTANTE_ID = :pessoaRepresentanteId """
|
||||
|
||||
# Preenchimento de parâmetros
|
||||
params = {
|
||||
"pessoaRepresentanteId": t_pessoa_representante_id_schema.pessoa_representante_id
|
||||
}
|
||||
|
||||
# Execução do sql
|
||||
response = self.run(sql, params)
|
||||
|
||||
# Retorna o resultado
|
||||
return response
|
||||
|
||||
except Exception as e:
|
||||
# Informa que houve uma falha na exclusão
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=f"Erro ao excluir regime de bens: {e}"
|
||||
)
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
from abstracts.repository import BaseRepository
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentantePessoaIdSchema
|
||||
|
||||
class TPessoaRepresentanteIndexRepository(BaseRepository):
|
||||
"""
|
||||
Repositório para a operação de listagem de todos os registros
|
||||
na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_pessoa_id_schema : TPessoaRepresentantePessoaIdSchema):
|
||||
"""
|
||||
Executa a consulta SQL para buscar todos os registros.
|
||||
|
||||
Returns:
|
||||
Uma lista de dicionários contendo os dados dos registros.
|
||||
"""
|
||||
# Montagem do SQL
|
||||
sql = """ SELECT
|
||||
TPR.PESSOA_ID,
|
||||
TPR.REPRESENTANTE_ID,
|
||||
TPR.PESSOA_REPRESENTANTE_ID,
|
||||
TPJ.NOME AS TPJ_NOME,
|
||||
TPF.NOME AS TPF_NOME,
|
||||
TPF.EMAIL AS TPF_EMAIL,
|
||||
TPF.TELEFONE AS TPF_TELEFONE
|
||||
FROM
|
||||
T_PESSOA_REPRESENTANTE TPR
|
||||
JOIN T_PESSOA TPF ON
|
||||
TPR.REPRESENTANTE_ID = TPF.PESSOA_ID
|
||||
JOIN T_PESSOA TPJ ON
|
||||
TPR.PESSOA_ID = TPJ.PESSOA_ID
|
||||
WHERE TPR.PESSOA_ID = :pessoa_id"""
|
||||
|
||||
params = {
|
||||
"pessoa_id": t_pessoa_representante_pessoa_id_schema.pessoa_id
|
||||
}
|
||||
|
||||
# Execução do sql
|
||||
response = self.fetch_all(sql, params)
|
||||
|
||||
# Retorna os dados localizados
|
||||
return response
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
from fastapi import HTTPException, status
|
||||
from abstracts.repository import BaseRepository
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteSaveSchema
|
||||
|
||||
|
||||
class TPessoaRepresentanteSaveRepository(BaseRepository):
|
||||
"""
|
||||
Repositório para a operação de salvamento de um novo registro na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_save_schema: TPessoaRepresentanteSaveSchema):
|
||||
"""
|
||||
Executa a operação de salvamento no banco de dados.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensSaveSchema): O esquema com os dados a serem salvos.
|
||||
|
||||
Returns:
|
||||
O registro recém-criado.
|
||||
|
||||
Raises:
|
||||
HTTPException: Caso ocorra um erro na execução da query.
|
||||
"""
|
||||
try:
|
||||
|
||||
# Montagem do SQL
|
||||
sql = """
|
||||
INSERT INTO T_PESSOA_REPRESENTANTE(
|
||||
REPRESENTANTE_ID,
|
||||
PESSOA_REPRESENTANTE_ID,
|
||||
PESSOA_ID,
|
||||
PESSOA_AUXILIAR_ID,
|
||||
MARCACAO_TIPO_ID,
|
||||
ATO_PARTETIPO_ID,
|
||||
ASSINATURA_TIPO
|
||||
) VALUES (
|
||||
:representante_id,
|
||||
:pessoa_representante_id,
|
||||
:pessoa_id,
|
||||
:pessoa_auxiliar_id,
|
||||
:marcacao_tipo_id,
|
||||
:ato_partetipo_id,
|
||||
:assinatura_tipo
|
||||
) RETURNING *;
|
||||
"""
|
||||
|
||||
# Preenchimento de parâmetros
|
||||
params = {
|
||||
"representante_id": t_pessoa_representante_save_schema.representante_id,
|
||||
"pessoa_representante_id": t_pessoa_representante_save_schema.pessoa_representante_id,
|
||||
"pessoa_id": t_pessoa_representante_save_schema.pessoa_id,
|
||||
"pessoa_auxiliar_id": t_pessoa_representante_save_schema.pessoa_auxiliar_id,
|
||||
"marcacao_tipo_id": t_pessoa_representante_save_schema.marcacao_tipo_id,
|
||||
"ato_partetipo_id": t_pessoa_representante_save_schema.ato_partetipo_id,
|
||||
"assinatura_tipo": t_pessoa_representante_save_schema.assinatura_tipo,
|
||||
}
|
||||
|
||||
# Execução do sql
|
||||
return self.run_and_return(sql, params)
|
||||
|
||||
except Exception as e:
|
||||
|
||||
# Informa que houve uma falha no salvamento do registro
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=f"Erro ao salvar registro: {e}"
|
||||
)
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
from abstracts.repository import BaseRepository
|
||||
from fastapi import HTTPException, status
|
||||
|
||||
from api.packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_delete_repository import TPessoaRepresentanteIdSchema
|
||||
|
||||
class TPessoaRepresentanteShowRepository(BaseRepository):
|
||||
"""
|
||||
Repositório para a operação de exibição de um registro na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_id_schema: TPessoaRepresentanteIdSchema):
|
||||
"""
|
||||
Busca um tipo de regime de bens específico pelo ID.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensIdSchema): O esquema que contém o ID do registro.
|
||||
|
||||
Returns:
|
||||
O registro encontrado ou None se não existir.
|
||||
|
||||
Raises:
|
||||
HTTPException: Caso ocorra um erro na execução da query.
|
||||
"""
|
||||
try:
|
||||
# Montagem do SQL
|
||||
sql = "SELECT * FROM T_PESSOA_REPRESENTANTE TPR WHERE TPR.PESSOA_REPRESENTANTE_ID = :pessoa_representante_id;"
|
||||
|
||||
# Preenchimento de parâmetros
|
||||
params = {
|
||||
'pessoa_representante_id': t_pessoa_representante_id_schema.pessoa_representante_id
|
||||
}
|
||||
|
||||
# Execução do SQL
|
||||
result = self.fetch_one(sql, params)
|
||||
|
||||
if not result:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Registro não encontrado"
|
||||
)
|
||||
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=f"Erro ao buscar registro: {str(e)}"
|
||||
)
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
from abstracts.repository import BaseRepository
|
||||
from fastapi import HTTPException, status
|
||||
from datetime import datetime
|
||||
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteUpdateSchema
|
||||
|
||||
|
||||
class TPessoaRepresentanteUpdateRepository(BaseRepository):
|
||||
"""
|
||||
Repositório responsável por atualizar parcialmente registros na tabela T_PESSOA_REPRESENTANTE.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_update_schema: TPessoaRepresentanteUpdateSchema):
|
||||
"""
|
||||
Executa a atualização de um registro da tabela T_PESSOA_REPRESENTANTE.
|
||||
|
||||
Args:
|
||||
t_pessoa_representante_update_schema (TPessoaRepresentanteUpdateSchema): Dados enviados para atualização.
|
||||
|
||||
Returns:
|
||||
dict: Registro atualizado.
|
||||
|
||||
Raises:
|
||||
HTTPException: Caso o registro não exista ou ocorra erro de execução.
|
||||
"""
|
||||
try:
|
||||
# Extrai apenas campos enviados
|
||||
data = t_pessoa_representante_update_schema.model_dump(exclude_unset=True)
|
||||
updates = []
|
||||
params = {"pessoa_representante_id": t_pessoa_representante_update_schema.pessoa_representante_id}
|
||||
|
||||
# Monta dinamicamente os campos que serão atualizados
|
||||
for field, value in data.items():
|
||||
if field != "pessoa_representante_id" and value is not None:
|
||||
updates.append(f"{field.upper()} = :{field}")
|
||||
params[field] = value
|
||||
|
||||
# Nenhum campo informado
|
||||
if not updates:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Nenhum campo informado para atualização."
|
||||
)
|
||||
|
||||
# SQL dinâmico corrigido
|
||||
sql = f"""
|
||||
UPDATE T_PESSOA_REPRESENTANTE
|
||||
SET {', '.join(updates)}
|
||||
WHERE PESSOA_REPRESENTANTE_ID = :pessoa_representante_id
|
||||
RETURNING *;
|
||||
"""
|
||||
|
||||
# Executa e retorna o resultado
|
||||
result = self.run_and_return(sql, params)
|
||||
|
||||
if not result:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail=f"Nenhum registro encontrado com o ID {t_pessoa_representante_update_schema.pessoa_representante_id}."
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
except HTTPException:
|
||||
raise
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=f"Erro ao atualizar o representante/pessoa: {e}"
|
||||
)
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
from pydantic import BaseModel, field_validator, model_validator
|
||||
from fastapi import HTTPException, status
|
||||
from typing import Optional
|
||||
from actions.validations.text import Text
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema base
|
||||
# ----------------------------------------------------
|
||||
class TPessoaRepresentanteSchema(BaseModel):
|
||||
representante_id: Optional[int] = None
|
||||
pessoa_representante_id: Optional[int] = None
|
||||
pessoa_id: Optional[int] = None
|
||||
pessoa_auxiliar_id: Optional[int] = None
|
||||
marcacao_tipo_id: Optional[int] = None
|
||||
ato_partetipo_id: Optional[int] = None
|
||||
assinatura_tipo: Optional[str] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para localizar (GET)
|
||||
# ----------------------------------------------------
|
||||
class TPessoaRepresentanteIdSchema(BaseModel):
|
||||
pessoa_representante_id: int
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para localizar (GET)
|
||||
# ----------------------------------------------------
|
||||
class TPessoaRepresentantePessoaIdSchema(BaseModel):
|
||||
pessoa_id: int
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para criação (POST)
|
||||
# ----------------------------------------------------
|
||||
class TPessoaRepresentanteSaveSchema(BaseModel):
|
||||
representante_id: Optional[int] = None
|
||||
pessoa_representante_id: Optional[int] = None
|
||||
pessoa_id: Optional[int]
|
||||
pessoa_auxiliar_id: Optional[int]
|
||||
marcacao_tipo_id: Optional[int]
|
||||
ato_partetipo_id: Optional[int]
|
||||
assinatura_tipo: Optional[str]
|
||||
|
||||
# Sanitiza o campo assinatura_tipo (texto)
|
||||
@field_validator('assinatura_tipo')
|
||||
def sanitize_fields(cls, v):
|
||||
if v:
|
||||
return Text.sanitize_input(v)
|
||||
return v
|
||||
|
||||
# Valida campos obrigatórios
|
||||
@model_validator(mode='after')
|
||||
def validate_required_fields(self):
|
||||
errors = []
|
||||
|
||||
if not self.pessoa_id:
|
||||
errors.append({'input': 'pessoa_id', 'message': 'O campo pessoa_id é obrigatório.'})
|
||||
|
||||
if not self.marcacao_tipo_id:
|
||||
errors.append({'input': 'marcacao_tipo_id', 'message': 'O campo marcacao_tipo_id é obrigatório.'})
|
||||
|
||||
if not self.ato_partetipo_id:
|
||||
errors.append({'input': 'ato_partetipo_id', 'message': 'O campo ato_partetipo_id é obrigatório.'})
|
||||
|
||||
if not self.assinatura_tipo or len(self.assinatura_tipo.strip()) == 0:
|
||||
errors.append({'input': 'assinatura_tipo', 'message': 'O campo assinatura_tipo é obrigatório.'})
|
||||
|
||||
if errors:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=errors
|
||||
)
|
||||
|
||||
return self
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para atualização (PUT)
|
||||
# ----------------------------------------------------
|
||||
class TPessoaRepresentanteUpdateSchema(BaseModel):
|
||||
pessoa_representante_id: Optional[int] = None
|
||||
pessoa_id: Optional[int] = None
|
||||
pessoa_auxiliar_id: Optional[int] = None
|
||||
marcacao_tipo_id: Optional[int] = None
|
||||
ato_partetipo_id: Optional[int] = None
|
||||
assinatura_tipo: Optional[str] = None
|
||||
|
||||
# Sanitiza
|
||||
@field_validator('assinatura_tipo')
|
||||
def sanitize_fields(cls, v):
|
||||
if v:
|
||||
return Text.sanitize_input(v)
|
||||
return v
|
||||
|
||||
# Valida se o campo texto não está vazio
|
||||
@model_validator(mode='after')
|
||||
def validate_fields(self):
|
||||
errors = []
|
||||
|
||||
if self.assinatura_tipo is not None and len(self.assinatura_tipo.strip()) == 0:
|
||||
errors.append({'input': 'assinatura_tipo', 'message': 'O campo assinatura_tipo não pode estar vazio.'})
|
||||
|
||||
if errors:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=errors
|
||||
)
|
||||
|
||||
return self
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
from api.packages.v1.administrativo.actions.t_pessoa_representante.t_pessoa_representante_delete_action import TPessoaRepresentanteDeleteAction
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteIdSchema
|
||||
|
||||
class TPessoaRepresentanteDeleteService:
|
||||
"""
|
||||
Serviço responsável por encapsular a lógica de negócio para a operação
|
||||
de exclusão de um registro na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_id_schema: TPessoaRepresentanteIdSchema):
|
||||
"""
|
||||
Executa a operação de exclusão do registro no banco de dados.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensIdSchema): O esquema com o ID do registro a ser excluído.
|
||||
|
||||
Returns:
|
||||
O resultado da operação de exclusão.
|
||||
"""
|
||||
# Instanciamento da ação
|
||||
t_pessoa_representante_delete_action = TPessoaRepresentanteDeleteAction()
|
||||
|
||||
# Executa a ação em questão
|
||||
data = t_pessoa_representante_delete_action.execute(t_pessoa_representante_id_schema)
|
||||
|
||||
# Retorno da informação
|
||||
return data
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
from fastapi import HTTPException, status
|
||||
|
||||
from api.packages.v1.administrativo.actions.t_pessoa_representante.t_pessoa_representante_index_action import TPessoaRepresentanteIndexAction
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentantePessoaIdSchema
|
||||
|
||||
class TPessoaRepresentanteIndexService:
|
||||
"""
|
||||
Serviço responsável por encapsular a lógica de negócio para a operação
|
||||
de listagem de registros na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_pessoa_id_schema: TPessoaRepresentantePessoaIdSchema):
|
||||
"""
|
||||
Executa a operação de busca de todos os registros no banco de dados.
|
||||
|
||||
Returns:
|
||||
A lista de registros encontrados.
|
||||
"""
|
||||
# Instanciamento da ação
|
||||
t_pessoa_representante_index_action = TPessoaRepresentanteIndexAction()
|
||||
|
||||
# Executa a busca de todas as ações
|
||||
data = t_pessoa_representante_index_action.execute(t_pessoa_representante_pessoa_id_schema)
|
||||
|
||||
# Verifica se foram localizados registros
|
||||
if not data:
|
||||
# Retorna uma exceção
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail='Não foi possível localizar as pessoas'
|
||||
)
|
||||
|
||||
# Retorna as informações localizadas
|
||||
return data
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
from actions.dynamic_import.dynamic_import import DynamicImport
|
||||
from api.packages.v1.administrativo.actions.t_pessoa_representante.t_pessoa_representante_save_action import TPessoaRepresentanteSaveAction
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteSaveSchema
|
||||
from api.packages.v1.sequencia.schemas.g_sequencia import GSequenciaSchema
|
||||
from api.packages.v1.sequencia.services.g_sequencia.checkout_service import GenerateService
|
||||
|
||||
class TPessoaRepresentanteSaveService:
|
||||
|
||||
def __init__(self):
|
||||
# Ação responsável por carregar as services de acordo com o estado
|
||||
self.dynamic_import = DynamicImport()
|
||||
|
||||
# Define o pacote que deve ser carregado
|
||||
self.dynamic_import.set_package("administrativo")
|
||||
|
||||
# Define a tabela que o pacote pertence
|
||||
self.dynamic_import.set_table("t_pessoa_representante")
|
||||
pass
|
||||
|
||||
# Cadastra o novo regime de bens
|
||||
def execute(self, t_pessoa_representante_save_schema: TPessoaRepresentanteSaveSchema):
|
||||
|
||||
# Verifica se precisa gerar o ID de sequência
|
||||
if not t_pessoa_representante_save_schema.pessoa_representante_id:
|
||||
|
||||
# Crio um objeto de sequencia
|
||||
sequencia_schema = GSequenciaSchema()
|
||||
|
||||
# Define os dados para atualizar a sequencia
|
||||
sequencia_schema.tabela = 'T_PESSOA_REPRESENTANTE'
|
||||
|
||||
# Busco a sequência atualizada
|
||||
generate = GenerateService()
|
||||
|
||||
# Busco a sequência atualizada
|
||||
sequencia = generate.execute(sequencia_schema)
|
||||
|
||||
# Atualiza os dados da chave primária
|
||||
t_pessoa_representante_save_schema.pessoa_representante_id = sequencia.sequencia
|
||||
|
||||
# Instanciamento de ações
|
||||
t_pessoa_representante_save_action = TPessoaRepresentanteSaveAction()
|
||||
|
||||
# Retorna o resultado da operação
|
||||
return t_pessoa_representante_save_action.execute(t_pessoa_representante_save_schema)
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
from fastapi import HTTPException, status
|
||||
|
||||
from api.packages.v1.administrativo.actions.t_pessoa_representante.t_pessoa_representante_show_action import TPessoaRepresentanteShowAction
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteIdSchema
|
||||
|
||||
class TPessoaRepresentanteShowService:
|
||||
"""
|
||||
Serviço responsável por encapsular a lógica de negócio para a operação
|
||||
de busca de um registro na tabela g_tb_regimebens.
|
||||
"""
|
||||
|
||||
def execute(self, t_pessoa_representante_id_schema: TPessoaRepresentanteIdSchema):
|
||||
"""
|
||||
Executa a operação de busca no banco de dados.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensIdSchema): O esquema com o ID a ser buscado.
|
||||
|
||||
Returns:
|
||||
O resultado da busca.
|
||||
"""
|
||||
# Instanciamento da ação
|
||||
t_pessoa_representante_show_action = TPessoaRepresentanteShowAction()
|
||||
|
||||
# Executa a ação em questão
|
||||
data = t_pessoa_representante_show_action.execute(t_pessoa_representante_id_schema)
|
||||
|
||||
if not data:
|
||||
# Retorna uma exceção
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail='Não foi possivel localizar a pessoa desejada'
|
||||
)
|
||||
|
||||
# Retorno da informação
|
||||
return data
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
from api.packages.v1.administrativo.actions.t_pessoa_representante.t_pessoa_representante_update_action import TPessoaRepresentanteUpdateAction
|
||||
from api.packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_update_repository import TPessoaRepresentanteUpdateSchema
|
||||
|
||||
|
||||
class TPessoaRepresentanteUpdateService:
|
||||
"""
|
||||
Serviço para a operação de atualização de um registro na tabela
|
||||
g_tb_regimebens.
|
||||
"""
|
||||
def execute(self, t_pessoa_representante_update_schema: TPessoaRepresentanteUpdateSchema):
|
||||
"""
|
||||
Executa a operação de atualização no banco de dados.
|
||||
|
||||
Args:
|
||||
regimebens_schema (GTbRegimebensUpdateSchema): O esquema com os dados a serem atualizados.
|
||||
|
||||
Returns:
|
||||
O resultado da operação de atualização.
|
||||
"""
|
||||
# Instanciamento de ações
|
||||
t_pessoa_representante_update_action = TPessoaRepresentanteUpdateAction()
|
||||
|
||||
# Retorna o resultado da operação
|
||||
return t_pessoa_representante_update_action.execute(t_pessoa_representante_update_schema)
|
||||
|
|
@ -29,6 +29,7 @@ from packages.v1.administrativo.endpoints import g_uf_endpoint
|
|||
from packages.v1.administrativo.endpoints import t_imovel_endpoint
|
||||
from packages.v1.administrativo.endpoints import t_imovel_unidade_endpoint
|
||||
from packages.v1.administrativo.endpoints import t_pessoa_endpoint
|
||||
from packages.v1.administrativo.endpoints import t_pessoa_representante_endpoint
|
||||
|
||||
# Cria uma instância do APIRouter que vai agregar todas as rotas da API
|
||||
api_router = APIRouter()
|
||||
|
|
@ -167,7 +168,12 @@ api_router.include_router(
|
|||
t_imovel_unidade_endpoint.router, prefix="/administrativo/t_imovel_unidade", tags=["Imóveis Unidades"]
|
||||
)
|
||||
|
||||
# Inclui as rotas de t_imovel_unidade
|
||||
# Inclui as rotas de t_pessoa
|
||||
api_router.include_router(
|
||||
t_pessoa_endpoint.router, prefix="/administrativo/t_pessoa", tags=["Pessoas Fisicas e Jurídicas"]
|
||||
)
|
||||
|
||||
# Inclui as rotas de t_imovel_unidade
|
||||
api_router.include_router(
|
||||
t_pessoa_representante_endpoint.router, prefix="/administrativo/t_pessoa_representante", tags=["Representante de pessoas jurídicas"]
|
||||
)
|
||||
Loading…
Add table
Reference in a new issue