[MVPTN-100] feat(CRUD): Implementa endpoints para maniputar T_PEssoa_Representante

This commit is contained in:
Keven Willian Pereira de Souza 2025-10-08 18:20:54 -03:00
parent 4a48001fef
commit 2f1461d1e0
19 changed files with 870 additions and 1 deletions

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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)
}

View file

@ -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

View file

@ -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}"
)

View file

@ -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

View file

@ -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}"
)

View file

@ -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)}"
)

View file

@ -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}"
)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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"]
)