From 48a5bebff7f44acd915d45eaad68072a3d5dac2b Mon Sep 17 00:00:00 2001 From: keven Date: Fri, 24 Oct 2025 17:14:08 -0300 Subject: [PATCH] =?UTF-8?q?[MVPTN-123]=20feta(CRUD):=20Implementa=20o=20CR?= =?UTF-8?q?UD=20necess=C3=A1rio=20para=20manipular=20a=20tabela=20GEmolume?= =?UTF-8?q?ntoItem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../g_emolumento_item_delete_action.py | 33 ++++++ .../g_emolumento_item_index_action.py | 36 ++++++ .../g_emolumento_item_save_action.py | 36 ++++++ .../g_emolumento_item_show_action.py | 36 ++++++ .../g_emolumento_item_update_action.py | 36 ++++++ .../g_emolumento_item_controller.py | 103 ++++++++++++++++++ .../endpoints/g_emolumento_item_endpoint.py | 96 ++++++++++++++++ .../g_emolumento_item_delete_repository.py | 45 ++++++++ .../g_emolumento_item_index_repository.py | 35 ++++++ .../g_emolumento_item_save_repository.py | 50 +++++++++ .../g_emolumento_item_show_repository.py | 67 ++++++++++++ .../g_emolumento_item_update_repository.py | 61 +++++++++++ .../schemas/g_emolumento_item_schema.py | 73 +++++++++++++ .../go/g_emolumento_item_delete_service.py | 35 ++++++ .../go/g_emolumento_item_index_service.py | 47 ++++++++ .../go/g_emolumento_item_save_service.py | 44 ++++++++ .../go/g_emolumento_item_show_service.py | 45 ++++++++ .../go/g_emolumento_item_update_service.py | 30 +++++ packages/v1/api.py | 9 +- 19 files changed, 915 insertions(+), 2 deletions(-) create mode 100644 packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_delete_action.py create mode 100644 packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_index_action.py create mode 100644 packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_save_action.py create mode 100644 packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_show_action.py create mode 100644 packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_update_action.py create mode 100644 packages/v1/administrativo/controllers/g_emolumento_item_controller.py create mode 100644 packages/v1/administrativo/endpoints/g_emolumento_item_endpoint.py create mode 100644 packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_delete_repository.py create mode 100644 packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_index_repository.py create mode 100644 packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_save_repository.py create mode 100644 packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_show_repository.py create mode 100644 packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_update_repository.py create mode 100644 packages/v1/administrativo/schemas/g_emolumento_item_schema.py create mode 100644 packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_delete_service.py create mode 100644 packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_index_service.py create mode 100644 packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_save_service.py create mode 100644 packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_show_service.py create mode 100644 packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_update_service.py diff --git a/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_delete_action.py b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_delete_action.py new file mode 100644 index 0000000..d79ce5c --- /dev/null +++ b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_delete_action.py @@ -0,0 +1,33 @@ +from abstracts.action import BaseAction +from api.packages.v1.administrativo.repositories.g_emolumento_item.g_emolumento_item_delete_repository import GEmolumentoItemDeleteRepository +from api.packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemIdSchema + + +class GEmolumentoItemDeleteAction(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_EMOLUMENTO_ITEM. + """ + + def execute(self, g_emolumento_item_id_schema: GEmolumentoItemIdSchema): + """ + Executa a operação de exclusão no banco de dados. + + Args: + g_emolumento_item_id_schema (GEmolumentoItemIdSchema): + O esquema contendo o ID do registro a ser excluído. + + Returns: + O resultado da operação de exclusão. + """ + # ---------------------------------------------------- + # Instanciamento do repositório + # ---------------------------------------------------- + g_emolumento_item_delete_repository = GEmolumentoItemDeleteRepository() + + # ---------------------------------------------------- + # Execução da exclusão + # ---------------------------------------------------- + response = g_emolumento_item_delete_repository.execute(g_emolumento_item_id_schema) + + return response diff --git a/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_index_action.py b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_index_action.py new file mode 100644 index 0000000..93e92cb --- /dev/null +++ b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_index_action.py @@ -0,0 +1,36 @@ +from abstracts.action import BaseAction +from packages.v1.administrativo.repositories.g_emolumento_item.g_emolumento_item_index_repository import GEmolumentoItemIndexRepository +from packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemIndexSchema + + +class GEmolumentoItemIndexAction(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_NATUREZA_TITULO. + """ + + def execute(self, g_emolumento_item_emolumento_index_schema: GEmolumentoItemIndexSchema): + """ + Executa a operação de listagem no banco de dados. + + Args: + g_emolumento_item_index_schema (GEmolumentoItemIndexSchema): + Esquema contendo parâmetros opcionais de filtro. + + Returns: + A lista de registros encontrados. + """ + # ---------------------------------------------------- + # Instanciamento do repositório + # ---------------------------------------------------- + g_emolumento_item_index_repository = GEmolumentoItemIndexRepository() + + # ---------------------------------------------------- + # Execução do repositório + # ---------------------------------------------------- + response = g_emolumento_item_index_repository.execute(g_emolumento_item_emolumento_index_schema) + + # ---------------------------------------------------- + # Retorno da informação + # -------------------------------- + return response diff --git a/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_save_action.py b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_save_action.py new file mode 100644 index 0000000..5ee6808 --- /dev/null +++ b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_save_action.py @@ -0,0 +1,36 @@ +from abstracts.action import BaseAction +from packages.v1.administrativo.repositories.g_emolumento_item.g_emolumento_item_save_repository import GEmolumentoItemSaveRepository +from packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemSaveSchema + + +class GEmolumentoItemSaveAction(BaseAction): + """ + Serviço responsável por encapsular a lógica de negócio para a operação + de salvamento de um novo registro na tabela G_EMOLUMENTO_ITEM. + """ + + def execute(self, g_emolumento_item_save_schema: GEmolumentoItemSaveSchema): + """ + Executa a operação de salvamento. + + Args: + g_emolumento_item_schema (GEmolumentoItemSchema): + O esquema com os dados a serem persistidos. + + Returns: + O resultado da operação de salvamento. + """ + # ---------------------------------------------------- + # Instanciamento do repositório + # ---------------------------------------------------- + g_emolumento_item_save_repository = GEmolumentoItemSaveRepository() + + # ---------------------------------------------------- + # Execução do repositório + # ---------------------------------------------------- + response = g_emolumento_item_save_repository.execute(g_emolumento_item_save_schema) + + # ---------------------------------------------------- + # Retorno da informação + # ---------------------------------------------------- + return response diff --git a/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_show_action.py b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_show_action.py new file mode 100644 index 0000000..8ed8b86 --- /dev/null +++ b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_show_action.py @@ -0,0 +1,36 @@ +from abstracts.action import BaseAction +from api.packages.v1.administrativo.repositories.g_emolumento_item.g_emolumento_item_show_repository import GEmolumentoItemShowRepository +from api.packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemIdSchema + + +class GEmolumentoItemShowAction(BaseAction): + """ + Serviço responsável por encapsular a lógica de negócio para a exibição + de um registro na tabela G_NATUREZA_TITULO. + """ + + def execute(self, g_emolumento_item_id_schema: GEmolumentoItemIdSchema): + """ + Executa a operação de exibição. + + Args: + g_emolumento_item_id_schema (GEmolumentoItemIdSchema): + O esquema com o ID do registro a ser exibido. + + Returns: + O resultado da operação de exibição. + """ + # ---------------------------------------------------- + # Instanciamento do repositório + # ---------------------------------------------------- + g_emolumento_item_show_repository = GEmolumentoItemShowRepository() + + # ---------------------------------------------------- + # Execução do repositório + # ---------------------------------------------------- + response = g_emolumento_item_show_repository.execute(g_emolumento_item_id_schema) + + # ---------------------------------------------------- + # Retorno da informação + # ---------------------------------------------------- + return response diff --git a/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_update_action.py b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_update_action.py new file mode 100644 index 0000000..0f4e067 --- /dev/null +++ b/packages/v1/administrativo/actions/g_emolumento_item/g_emolumento_item_update_action.py @@ -0,0 +1,36 @@ +from abstracts.action import BaseAction +from api.packages.v1.administrativo.repositories.g_emolumento_item.g_emolumento_item_update_repository import GEmolumentoItemUpdateRepository +from api.packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemUpdateSchema + + +class GEmolumentoItemUpdateAction(BaseAction): + """ + Serviço responsável por encapsular a lógica de negócio para a atualização + de um registro na tabela G_NATUREZA_TITULO. + """ + + def execute(self, g_emolumento_item_update_schema: GEmolumentoItemUpdateSchema): + """ + Executa a operação de atualização. + + Args: + g_emolumento_item_update_schema (GEmolumentoItemUpdateSchema): + O esquema com os dados a serem atualizados. + + Returns: + O resultado da operação de atualização. + """ + # ---------------------------------------------------- + # Instanciamento do repositório de atualização + # ---------------------------------------------------- + g_emolumento_item_update_repository = GEmolumentoItemUpdateRepository() + + # ---------------------------------------------------- + # Execução do repositório + # ---------------------------------------------------- + response = g_emolumento_item_update_repository.execute(g_emolumento_item_update_schema) + + # ---------------------------------------------------- + # Retorno do resultado + # ---------------------------------------------------- + return response diff --git a/packages/v1/administrativo/controllers/g_emolumento_item_controller.py b/packages/v1/administrativo/controllers/g_emolumento_item_controller.py new file mode 100644 index 0000000..3898dcd --- /dev/null +++ b/packages/v1/administrativo/controllers/g_emolumento_item_controller.py @@ -0,0 +1,103 @@ +from actions.dynamic_import.dynamic_import import DynamicImport +from packages.v1.administrativo.schemas.g_emolumento_item_schema import ( + GEmolumentoItemIndexSchema, + GEmolumentoItemSaveSchema, + GEmolumentoItemUpdateSchema, + GEmolumentoItemIdSchema +) + + +class GEmolumentoItemController: + """ + Controller responsável por orquestrar as operações CRUD da tabela G_EMOLUMENTO_ITEM, + utilizando carregamento dinâmico de serviços via DynamicImport. + """ + + def __init__(self): + # ---------------------------------------------------- + # Inicialização do DynamicImport + # ---------------------------------------------------- + self.dynamic_import = DynamicImport() + self.dynamic_import.set_package("administrativo") + self.dynamic_import.set_table("g_emolumento_item") + + # ---------------------------------------------------- + # Lista todos os registros de G_EMOLUMENTO_ITEM + # ---------------------------------------------------- + def index(self, g_emolumento_item_emolumento_index_schema: GEmolumentoItemIndexSchema): + + # Importação da classe desejada + index_service = self.dynamic_import.service("g_emolumento_item_index_service", "GEmolumentoItemIndexService") + + # Instância da classe service + self.index_service = index_service() + + # Execução da listagem + return { + "message": "Registros de G_EMOLUMENTO_ITEM localizados com sucesso.", + "data": self.index_service.execute(g_emolumento_item_emolumento_index_schema), + } + + # ---------------------------------------------------- + # Busca um registro específico de G_EMOLUMENTO_ITEM pelo ID + # ---------------------------------------------------- + def show(self, g_emolumento_item_id_schema: GEmolumentoItemIdSchema): + # Importação da classe desejada + show_service = self.dynamic_import.service("g_emolumento_item_show_service", "GEmolumentoItemShowService") + + # Instância da classe service + self.show_service = show_service() + + # Execução da busca + return { + "message": "Registro de G_EMOLUMENTO_ITEM localizado com sucesso.", + "data": self.show_service.execute(g_emolumento_item_id_schema), + } + + # ---------------------------------------------------- + # Cadastra um novo registro em G_EMOLUMENTO_ITEM + # ---------------------------------------------------- + def save(self, g_emolumento_item_save_schema: GEmolumentoItemSaveSchema): + # Importação da classe desejada + save_service = self.dynamic_import.service("g_emolumento_item_save_service", "GEmolumentoItemSaveService") + + # Instância da classe service + self.save_service = save_service() + + # Execução do salvamento + return { + "message": "Registro de G_EMOLUMENTO_ITEM salvo com sucesso.", + "data": self.save_service.execute(g_emolumento_item_save_schema), + } + + # ---------------------------------------------------- + # Atualiza um registro existente de G_EMOLUMENTO_ITEM + # ---------------------------------------------------- + def update(self, g_emolumento_item_update_schema: GEmolumentoItemUpdateSchema): + # Importação da classe desejada + update_service = self.dynamic_import.service("g_emolumento_item_update_service", "GEmolumentoItemUpdateService") + + # Instância da classe service + self.update_service = update_service() + + # Execução da atualização + return { + "message": "Registro de G_EMOLUMENTO_ITEM atualizado com sucesso.", + "data": self.update_service.execute(g_emolumento_item_update_schema), + } + + # ---------------------------------------------------- + # Exclui um registro de G_EMOLUMENTO_ITEM + # ---------------------------------------------------- + def delete(self, g_emolumento_item_id_schema: GEmolumentoItemIdSchema): + # Importação da classe desejada + delete_service = self.dynamic_import.service("g_emolumento_item_delete_service", "GEmolumentoItemDeleteService") + + # Instância da classe service + self.delete_service = delete_service() + + # Execução da exclusão + return { + "message": "Registro de G_EMOLUMENTO_ITEM removido com sucesso.", + "data": self.delete_service.execute(g_emolumento_item_id_schema), + } diff --git a/packages/v1/administrativo/endpoints/g_emolumento_item_endpoint.py b/packages/v1/administrativo/endpoints/g_emolumento_item_endpoint.py new file mode 100644 index 0000000..041302c --- /dev/null +++ b/packages/v1/administrativo/endpoints/g_emolumento_item_endpoint.py @@ -0,0 +1,96 @@ +# Importação de bibliotecas +from fastapi import APIRouter, Depends, status +from actions.jwt.get_current_user import get_current_user +from packages.v1.administrativo.controllers.g_emolumento_item_controller import GEmolumentoItemController +from packages.v1.administrativo.schemas.g_emolumento_item_schema import ( + GEmolumentoItemIndexSchema, + GEmolumentoItemSaveSchema, + GEmolumentoItemUpdateSchema, + GEmolumentoItemIdSchema +) + +# ---------------------------------------------------- +# Inicializa o roteador para as rotas da tabela G_EMOLUMENTO_ITEM +# ---------------------------------------------------- +router = APIRouter() + +# Instanciamento do controller +g_emolumento_item_controller = GEmolumentoItemController() + +# ---------------------------------------------------- +# Lista todos os registros de G_EMOLUMENTO_ITEM +# ---------------------------------------------------- +@router.get('/{emolumento_id}/{emolumento_periodo_id}', + status_code=status.HTTP_200_OK, + summary='Lista todos os registros de G_EMOLUMENTO_ITEM cadastrados', + response_description='Lista todos os registros de G_EMOLUMENTO_ITEM cadastrados') +async def index(emolumento_id : int, emolumento_periodo_id : int, current_user: dict = Depends(get_current_user)): + """ + Retorna todos os registros da tabela G_EMOLUMENTO_ITEM. + """ + g_emolumento_item_emolumento_index_schema = GEmolumentoItemIndexSchema(emolumento_id=emolumento_id, emolumento_periodo_id=emolumento_periodo_id) + response = g_emolumento_item_controller.index(g_emolumento_item_emolumento_index_schema) + return response + + +# ---------------------------------------------------- +# Busca um registro específico de G_EMOLUMENTO_ITEM pelo ID +# ---------------------------------------------------- +@router.get('/{emolumento_item_id}', + status_code=status.HTTP_200_OK, + summary='Busca um registro de G_EMOLUMENTO_ITEM pelo ID', + response_description='Busca um registro de G_EMOLUMENTO_ITEM em específico') +async def show(emolumento_item_id: int, current_user: dict = Depends(get_current_user)): + """ + Retorna um registro específico de G_EMOLUMENTO_ITEM com base no ID informado. + """ + g_emolumento_item_id_schema = GEmolumentoItemIdSchema(emolumento_item_id=emolumento_item_id) + response = g_emolumento_item_controller.show(g_emolumento_item_id_schema) + return response + + +# ---------------------------------------------------- +# Cadastra um novo registro em G_EMOLUMENTO_ITEM +# ---------------------------------------------------- +@router.post('/', + status_code=status.HTTP_201_CREATED, + summary='Cadastra um novo registro em G_EMOLUMENTO_ITEM', + response_description='Cadastra um novo registro em G_EMOLUMENTO_ITEM') +async def save(g_emolumento_item_schema: GEmolumentoItemSaveSchema, current_user: dict = Depends(get_current_user)): + """ + Cria um novo registro na tabela G_EMOLUMENTO_ITEM. + """ + response = g_emolumento_item_controller.save(g_emolumento_item_schema) + return response + + +# ---------------------------------------------------- +# Atualiza um registro existente de G_EMOLUMENTO_ITEM +# ---------------------------------------------------- +@router.put('/{emolumento_item_id}', + status_code=status.HTTP_200_OK, + summary='Atualiza um registro existente em G_EMOLUMENTO_ITEM', + response_description='Atualiza um registro existente em G_EMOLUMENTO_ITEM') +async def update(emolumento_item_id: int, g_emolumento_item_update_schema: GEmolumentoItemUpdateSchema, current_user: dict = Depends(get_current_user)): + """ + Atualiza um registro existente de G_EMOLUMENTO_ITEM com base no ID informado. + """ + g_emolumento_item_update_schema.emolumento_item_id = emolumento_item_id + response = g_emolumento_item_controller.update(g_emolumento_item_update_schema) + return response + + +# ---------------------------------------------------- +# Exclui um registro de G_EMOLUMENTO_ITEM +# ---------------------------------------------------- +@router.delete('/{emolumento_item_id}', + status_code=status.HTTP_200_OK, + summary='Remove um registro de G_EMOLUMENTO_ITEM', + response_description='Remove um registro de G_EMOLUMENTO_ITEM') +async def delete(emolumento_item_id: int, current_user: dict = Depends(get_current_user)): + """ + Remove um registro específico de G_EMOLUMENTO_ITEM com base no ID informado. + """ + g_emolumento_item_id_schema = GEmolumentoItemIdSchema(emolumento_item_id=emolumento_item_id) + response = g_emolumento_item_controller.delete(g_emolumento_item_id_schema) + return response \ No newline at end of file diff --git a/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_delete_repository.py b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_delete_repository.py new file mode 100644 index 0000000..ddacc2c --- /dev/null +++ b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_delete_repository.py @@ -0,0 +1,45 @@ +from abstracts.repository import BaseRepository +from fastapi import HTTPException, status + +from packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemIdSchema + +class GEmolumentoItemDeleteRepository(BaseRepository): + """ + Repositório responsável pela exclusão de registros na tabela + g_emolumento_item. + """ + def execute(self, g_emolumento_item_id_schema: GEmolumentoItemIdSchema): + """ + Executa a exclusão de um registro específico da tabela g_emolumento_item + com base no ID informado. + + Args: + g_emolumento_item_id_schema (GEmolumentoItemIdSchema): Esquema contendo o ID do registro a ser excluído. + + Returns: + O resultado da operação de exclusão. + """ + try: + # Montagem do SQL + sql = """ + DELETE FROM g_emolumento_item GG + WHERE GG.emolumento_item_id = :emolumento_item_id + """ + + # Preenchimento dos parâmetros + params = { + "emolumento_item_id": g_emolumento_item_id_schema.emolumento_item_id + } + + # Execução da instrução SQL + response = self.run(sql, params) + + # Retorna o resultado da exclusão + return response + + except Exception as e: + # Lança exceção HTTP em caso de erro + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Erro ao excluir registro de g_emolumento_item: {e}" + ) diff --git a/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_index_repository.py b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_index_repository.py new file mode 100644 index 0000000..6eb64a0 --- /dev/null +++ b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_index_repository.py @@ -0,0 +1,35 @@ +from abstracts.repository import BaseRepository +from packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemIndexSchema + +class GEmolumentoItemIndexRepository(BaseRepository): + """ + Repositório para a operação de listagem de todos os registros + na tabela t_censec_qualidade. + """ + + def execute(self, g_emolumento_item_emolumento_index_schema: GEmolumentoItemIndexSchema): + """ + 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 + GI.* + FROM G_EMOLUMENTO_ITEM GI + WHERE GI.EMOLUMENTO_ID = :emolumento_id + AND GI.EMOLUMENTO_PERIODO_ID = :emolumento_periodo_id + """ + + # Preenchimento dos parâmetros + params = { + "emolumento_id": g_emolumento_item_emolumento_index_schema.emolumento_id, + "emolumento_periodo_id": g_emolumento_item_emolumento_index_schema.emolumento_periodo_id, + } + + # Execução do sql + response = self.fetch_all(sql, params) + + # Retorna os dados localizados + return response \ No newline at end of file diff --git a/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_save_repository.py b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_save_repository.py new file mode 100644 index 0000000..77f052c --- /dev/null +++ b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_save_repository.py @@ -0,0 +1,50 @@ +from fastapi import HTTPException, status +from abstracts.repository import BaseRepository +from api.actions.data.generate_insert_sql import generate_insert_sql +from api.packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemSaveSchema + + +class GEmolumentoItemSaveRepository(BaseRepository): + """ + Repositório responsável pela operação de salvamento de um novo registro + na tabela G_EMOLUMENTO_ITEM. + """ + + def execute(self, g_emolumento_item_save_schema: GEmolumentoItemSaveSchema): + """ + Executa a operação de salvamento no banco de dados. + + Args: + g_emolumento_item_save_schema (GEmolumentoItemSchema): 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: + + # ---------------------------------------------------- + # Preenchimento dos parâmetros + # ---------------------------------------------------- + params = g_emolumento_item_save_schema.model_dump(exclude_unset=True) + + # ---------------------------------------------------- + # Montagem do SQL dinâmico + # ---------------------------------------------------- + sql = generate_insert_sql('G_EMOLUMENTO_ITEM', params) + + # ---------------------------------------------------- + # Execução do SQL e retorno do registro + # ---------------------------------------------------- + return self.run_and_return(sql, params) + + except Exception as e: + # ---------------------------------------------------- + # Tratamento de erros e lançamento de exceção HTTP + # ---------------------------------------------------- + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Erro ao salvar registro em G_EMOLUMENTO_ITEM: {e}" + ) \ No newline at end of file diff --git a/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_show_repository.py b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_show_repository.py new file mode 100644 index 0000000..05c645e --- /dev/null +++ b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_show_repository.py @@ -0,0 +1,67 @@ +from abstracts.repository import BaseRepository +from fastapi import HTTPException, status + +from packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemIdSchema + + +class GEmolumentoItemShowRepository(BaseRepository): + """ + Repositório responsável pela operação de exibição de um registro + na tabela G_EMOLUMENTO_ITEM_ITEM. + """ + + def execute(self, g_emolumento_item_id_schema: GEmolumentoItemIdSchema): + """ + Busca um registro específico de G_EMOLUMENTO_ITEM_ITEM pelo ID. + + Args: + g_emolumento_item_id_schema (GEmolumentoItemIdSchema): + Esquema contendo o ID do registro a ser buscado. + + Returns: + O registro encontrado ou levanta exceção HTTP 404 se não existir. + + Raises: + HTTPException: Caso ocorra um erro na execução da query. + """ + try: + # ---------------------------------------------------- + # Montagem do SQL + # ---------------------------------------------------- + sql = """ + SELECT * + FROM G_EMOLUMENTO_ITEM GG + WHERE GG.EMOLUMENTO_ITEM_ID = :emolumento_item_id + """ + + # ---------------------------------------------------- + # Preenchimento de parâmetros + # ---------------------------------------------------- + params = g_emolumento_item_id_schema.model_dump(exclude_unset=True) + + # ---------------------------------------------------- + # Execução do SQL + # ---------------------------------------------------- + result = self.fetch_one(sql, params) + + # ---------------------------------------------------- + # Validação de retorno + # ---------------------------------------------------- + if not result: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Registro de G_EMOLUMENTO_ITEM_ITEM não encontrado." + ) + + return result + + except HTTPException: + # Repassa exceções HTTP explícitas (como 404) + raise + + except Exception as e: + # Captura falhas inesperadas de execução + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Erro ao buscar registro em G_EMOLUMENTO_ITEM_ITEM: {e}" + ) diff --git a/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_update_repository.py b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_update_repository.py new file mode 100644 index 0000000..df90a3c --- /dev/null +++ b/packages/v1/administrativo/repositories/g_emolumento_item/g_emolumento_item_update_repository.py @@ -0,0 +1,61 @@ +from abstracts.repository import BaseRepository +from api.actions.data.prepare_update_data import prepare_update_data +from fastapi import HTTPException, status + +from api.packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemUpdateSchema + + +class GEmolumentoItemUpdateRepository(BaseRepository): + """ + Repositório responsável pela operação de atualização de registros + na tabela G_EMOLUMENTO_ITEM. + """ + + def execute(self, g_emolumento_item_update_schema: GEmolumentoItemUpdateSchema): + """ + Atualiza um registro existente na tabela G_EMOLUMENTO_ITEM. + + Args: + g_emolumento_item_update_schema (GEmolumentoItemUpdateSchema): + Esquema contendo os dados a serem atualizados. + + Returns: + O registro atualizado (via RETURNING *). + + Raises: + HTTPException: Caso ocorra um erro na execução do SQL. + """ + try: + # ---------------------------------------------------- + # Prepara parâmetros e colunas de atualização dinâmicas + # ---------------------------------------------------- + params, update_columns = prepare_update_data( + g_emolumento_item_update_schema, + exclude_fields=["emolumento_item_id"], + id_field="emolumento_item_id" + ) + + # ---------------------------------------------------- + # Montagem do SQL dinâmico + # ---------------------------------------------------- + sql = f""" + UPDATE G_EMOLUMENTO_ITEM + SET {update_columns} + WHERE EMOLUMENTO_ITEM_ID = :emolumento_item_id + RETURNING *; + """ + + # ---------------------------------------------------- + # Execução e retorno do registro atualizado + # ---------------------------------------------------- + response = self.run_and_return(sql, params) + return response + + except Exception as e: + # ---------------------------------------------------- + # Tratamento de exceção e retorno HTTP padronizado + # ---------------------------------------------------- + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Erro ao atualizar registro em G_EMOLUMENTO_ITEM: {str(e)}" + ) diff --git a/packages/v1/administrativo/schemas/g_emolumento_item_schema.py b/packages/v1/administrativo/schemas/g_emolumento_item_schema.py new file mode 100644 index 0000000..d7f6d0d --- /dev/null +++ b/packages/v1/administrativo/schemas/g_emolumento_item_schema.py @@ -0,0 +1,73 @@ +from pydantic import BaseModel +from typing import Optional + +# ---------------------------------------------------- +# Schema base - representa a tabela G_EMOLUMENTO_ITEM +# ---------------------------------------------------- +class GEmolumentoItemSchema(BaseModel): + valor_emolumento: Optional[float] = None + emolumento_item_id: Optional[float] = None + emolumento_id: Optional[float] = None + valor_inicio: Optional[float] = None + valor_fim: Optional[float] = None + valor_taxa_judiciaria: Optional[float] = None + emolumento_periodo_id: Optional[float] = None + codigo: Optional[float] = None + pagina_extra: Optional[float] = None + valor_pagina_extra: Optional[float] = None + valor_outra_taxa1: Optional[float] = None + codigo_selo: Optional[str] = None + valor_fundo_ri: Optional[float] = None + codigo_tabela: Optional[str] = None + selo_grupo_id: Optional[float] = None + codigo_km: Optional[str] = None + emolumento_acresce: Optional[float] = None + taxa_acresce: Optional[float] = None + funcivil_acresce: Optional[float] = None + valor_fracao: Optional[float] = None + valor_por_excedente_emol: Optional[float] = None + valor_por_excedente_tj: Optional[float] = None + valor_por_excedente_fundo: Optional[float] = None + valor_limite_excedente_emol: Optional[float] = None + valor_limite_excedente_tj: Optional[float] = None + valor_limite_excedente_fundo: Optional[float] = None + fundo_selo: Optional[float] = None + distribuicao: Optional[float] = None + vrcext: Optional[float] = None + + class Config: + from_attributes = True + + +# ---------------------------------------------------- +# Schema para localizar um registro pelo ID (GET /{id}) +# ---------------------------------------------------- +class GEmolumentoItemIdSchema(BaseModel): + emolumento_item_id: float + + class Config: + from_attributes = True + +# ---------------------------------------------------- +# Schema para localizar um registro pelo EmolumentoId (GET /{id}) +# ---------------------------------------------------- +class GEmolumentoItemIndexSchema(BaseModel): + emolumento_id: float + emolumento_periodo_id: float + + class Config: + from_attributes = True + + +# ---------------------------------------------------- +# Schema para criação (POST) +# ---------------------------------------------------- +class GEmolumentoItemSaveSchema(GEmolumentoItemSchema): + pass + + +# ---------------------------------------------------- +# Schema para atualização (PUT) +# ---------------------------------------------------- +class GEmolumentoItemUpdateSchema(GEmolumentoItemSchema): + pass diff --git a/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_delete_service.py b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_delete_service.py new file mode 100644 index 0000000..42aaa00 --- /dev/null +++ b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_delete_service.py @@ -0,0 +1,35 @@ +from api.packages.v1.administrativo.actions.g_emolumento_item.g_emolumento_item_delete_action import GEmolumentoItemDeleteAction +from api.packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemIdSchema + + +class GEmolumentoItemDeleteService: + """ + 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_EMOLUMENTO_ITEM. + """ + + def execute(self, g_emolumento_item_id_schema: GEmolumentoItemIdSchema): + """ + Executa a operação de exclusão do registro no banco de dados. + + Args: + g_emolumento_item_id_schema (GEmolumentoItemIdSchema): + O esquema com o ID do registro a ser excluído. + + Returns: + O resultado da operação de exclusão. + """ + # ---------------------------------------------------- + # Instanciamento da ação + # ---------------------------------------------------- + g_emolumento_item_delete_action = GEmolumentoItemDeleteAction() + + # ---------------------------------------------------- + # Execução da ação + # ---------------------------------------------------- + data = g_emolumento_item_delete_action.execute(g_emolumento_item_id_schema) + + # ---------------------------------------------------- + # Retorno da informação + # ---------------------------------------------------- + return data diff --git a/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_index_service.py b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_index_service.py new file mode 100644 index 0000000..9ef62d8 --- /dev/null +++ b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_index_service.py @@ -0,0 +1,47 @@ +from packages.v1.administrativo.actions.g_emolumento_item.g_emolumento_item_index_action import GEmolumentoItemIndexAction +from fastapi import HTTPException, status + +from packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemIndexSchema + + +class GEmolumentoItemIndexService: + """ + Serviço responsável por encapsular a lógica de negócio para a operação + de listagem de registros na tabela G_EMOLUMENTO_ITEM. + """ + + def execute(self, g_emolumento_item_emolumento_index_schema: GEmolumentoItemIndexSchema): + + """ + Executa a operação de busca de todos os registros no banco de dados. + + Args: + g_emolumento_item_index_schema (GEmolumentoItemIndexSchema): + Esquema que pode conter filtros ou parâmetros de busca. + + Returns: + A lista de registros encontrados. + """ + # ---------------------------------------------------- + # Instanciamento da ação + # ---------------------------------------------------- + g_emolumento_item_index_action = GEmolumentoItemIndexAction() + + # ---------------------------------------------------- + # Execução da ação + # ---------------------------------------------------- + data = g_emolumento_item_index_action.execute(g_emolumento_item_emolumento_index_schema) + + # ---------------------------------------------------- + # Verificação de retorno + # ---------------------------------------------------- + if not data: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Não foi possível localizar registros de G_EMOLUMENTO_ITEM." + ) + + # ---------------------------------------------------- + # Retorno da informação + # ---------------------------------------------------- + return data diff --git a/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_save_service.py b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_save_service.py new file mode 100644 index 0000000..49a1e12 --- /dev/null +++ b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_save_service.py @@ -0,0 +1,44 @@ +from api.packages.v1.administrativo.actions.g_emolumento_item.g_emolumento_item_save_action import GEmolumentoItemSaveAction +from api.packages.v1.sequencia.schemas.g_sequencia import GSequenciaSchema +from api.packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemSaveSchema +from api.packages.v1.sequencia.services.g_sequencia.generate_service import GenerateService + + +class GEmolumentoItemSaveService: + """ + Serviço responsável por encapsular a lógica de negócio para a operação + de criação de registros na tabela G_EMOLUMENTO_ITEM. + """ + + def execute(self, g_emolumento_item_save_schema: GEmolumentoItemSaveSchema): + """ + Executa a operação de salvamento do registro no banco de dados. + + Args: + g_emolumento_item_save_schema (GEmolumentoItemSaveSchema): + O esquema com os dados a serem salvos. + + Returns: + O registro recém-criado. + """ + + # ---------------------------------------------------- + # Geração automática de ID (sequência) + # ---------------------------------------------------- + if not g_emolumento_item_save_schema.emolumento_item_id: + # Cria o schema de sequência + sequencia_schema = GSequenciaSchema() + sequencia_schema.tabela = "G_EMOLUMENTO_ITEM" + + # Gera a sequência atualizada + generate = GenerateService() + sequencia = generate.execute(sequencia_schema) + + # Atualiza o ID no schema + g_emolumento_item_save_schema.emolumento_item_id = sequencia.sequencia + + # ---------------------------------------------------- + # Instanciamento e execução da Action de salvamento + # ---------------------------------------------------- + g_emolumento_item_save_action = GEmolumentoItemSaveAction() + return g_emolumento_item_save_action.execute(g_emolumento_item_save_schema) diff --git a/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_show_service.py b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_show_service.py new file mode 100644 index 0000000..f70ce6e --- /dev/null +++ b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_show_service.py @@ -0,0 +1,45 @@ +from api.packages.v1.administrativo.actions.g_emolumento_item.g_emolumento_item_show_action import GEmolumentoItemShowAction +from api.packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemIdSchema +from fastapi import HTTPException, status + + +class GEmolumentoItemShowService: + """ + Serviço responsável por encapsular a lógica de negócio para a operação + de busca de um registro na tabela G_EMOLUMENTO_ITEM. + """ + + def execute(self, g_emolumento_item_id_schema: GEmolumentoItemIdSchema): + """ + Executa a operação de busca no banco de dados. + + Args: + g_emolumento_item_id_schema (GEmolumentoItemIdSchema): + O esquema com o ID do registro a ser buscado. + + Returns: + O resultado da busca. + """ + # ---------------------------------------------------- + # Instanciamento da ação + # ---------------------------------------------------- + g_emolumento_item_show_action = GEmolumentoItemShowAction() + + # ---------------------------------------------------- + # Execução da ação + # ---------------------------------------------------- + data = g_emolumento_item_show_action.execute(g_emolumento_item_id_schema) + + # ---------------------------------------------------- + # Verificação de resultado + # ---------------------------------------------------- + if not data: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Não foi possível localizar o registro de G_EMOLUMENTO_ITEM." + ) + + # ---------------------------------------------------- + # Retorno da informação + # ---------------------------------------------------- + return data diff --git a/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_update_service.py b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_update_service.py new file mode 100644 index 0000000..f512c02 --- /dev/null +++ b/packages/v1/administrativo/services/g_emolumento_item/go/g_emolumento_item_update_service.py @@ -0,0 +1,30 @@ +from api.packages.v1.administrativo.actions.g_emolumento_item.g_emolumento_item_update_action import GEmolumentoItemUpdateAction +from api.packages.v1.administrativo.schemas.g_emolumento_item_schema import GEmolumentoItemUpdateSchema + + +class GEmolumentoItemUpdateService: + """ + Serviço responsável pela operação de atualização de um registro + na tabela G_EMOLUMENTO_ITEM. + """ + + def execute(self, g_emolumento_item_update_schema: GEmolumentoItemUpdateSchema): + """ + Executa a operação de atualização no banco de dados. + + Args: + g_emolumento_item_update_schema (GEmolumentoItemUpdateSchema): + O esquema com os dados a serem atualizados. + + Returns: + O resultado da operação de atualização. + """ + # ---------------------------------------------------- + # Instanciamento da ação + # ---------------------------------------------------- + g_emolumento_item_update_action = GEmolumentoItemUpdateAction() + + # ---------------------------------------------------- + # Execução da ação e retorno do resultado + # ---------------------------------------------------- + return g_emolumento_item_update_action.execute(g_emolumento_item_update_schema) diff --git a/packages/v1/api.py b/packages/v1/api.py index 164bbbe..73efc44 100644 --- a/packages/v1/api.py +++ b/packages/v1/api.py @@ -2,8 +2,8 @@ from fastapi import APIRouter # Importa os módulos de rotas específicos -from api.packages.v1.administrativo.endpoints import g_cartorio_endpoint, g_emolumento_endpoint, g_emolumento_periodo_endpoint, g_gramatica_endpoint, g_natureza_titulo_endpoint, g_selo_grupo_endpoint, t_ato_partetipo_endpoint, t_censec_tiponatureza_endpoint -from packages.v1.administrativo.endpoints import t_censec_tipoato_endpoint +from packages.v1.administrativo.endpoints import g_cartorio_endpoint, g_emolumento_endpoint, g_emolumento_periodo_endpoint, g_gramatica_endpoint, g_natureza_titulo_endpoint, g_selo_grupo_endpoint, t_ato_partetipo_endpoint, t_censec_tiponatureza_endpoint +from packages.v1.administrativo.endpoints import g_emolumento_item_endpoint, t_censec_tipoato_endpoint from packages.v1.administrativo.endpoints import t_censec_qualidadeato_endpoint from packages.v1.administrativo.endpoints import g_tb_txmodelogrupo_endpoint from packages.v1.administrativo.endpoints import g_tb_profissao_endpoint @@ -229,4 +229,9 @@ api_router.include_router( # Inclui as rotas de g_emolumento periodo api_router.include_router( g_selo_grupo_endpoint.router, prefix="/administrativo/g_selo_grupo", tags=["Grupos de Selos"] +) + +# Inclui as rotas de g_emolumento periodo +api_router.include_router( + g_emolumento_item_endpoint.router, prefix="/administrativo/g_emolumento_item", tags=["Itens do Emolumento"] ) \ No newline at end of file