diff --git a/packages/v1/administrativo/actions/g_natureza/g_natureza_index_by_sistema_id_action.py b/packages/v1/administrativo/actions/g_natureza/g_natureza_index_by_sistema_id_action.py new file mode 100644 index 0000000..8537c5c --- /dev/null +++ b/packages/v1/administrativo/actions/g_natureza/g_natureza_index_by_sistema_id_action.py @@ -0,0 +1,25 @@ +from abstracts.action import BaseAction +from api.packages.v1.administrativo.repositories.g_natureza.g_natureza_index_by_sistema_id_repository import IndexBySistemaIdRepository +from api.packages.v1.administrativo.schemas.g_natureza_schema import GNaturezaSistemaIdSchema + +class IndexActionBySistemaId(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. + """ + + def execute(self, g_natureza_sistema_id_schema: GNaturezaSistemaIdSchema): + """ + Executa a operação de listagem no banco de dados. + + Returns: + A lista de todos os registros. + """ + # Instanciamento do repositório + index_repository = IndexBySistemaIdRepository() + + # Execução do repositório + response = index_repository.execute(g_natureza_sistema_id_schema) + + # Retorno da informação + return response \ No newline at end of file diff --git a/packages/v1/administrativo/controllers/g_natureza_controller.py b/packages/v1/administrativo/controllers/g_natureza_controller.py index 8e410af..0ba5900 100644 --- a/packages/v1/administrativo/controllers/g_natureza_controller.py +++ b/packages/v1/administrativo/controllers/g_natureza_controller.py @@ -1,7 +1,7 @@ from actions.dynamic_import.dynamic_import import DynamicImport from packages.v1.administrativo.schemas.g_natureza_schema import ( - GNaturezaSchema, GNaturezaSaveSchema, + GNaturezaSistemaIdSchema, GNaturezaUpdateSchema, GNaturezaIdSchema, GNaturezaDescricaoSchema @@ -34,6 +34,21 @@ class GNaturezaController: 'message': 'Registros de natureza localizados com sucesso', 'data': self.indexService.execute() } + + # Lista todos os registros de natureza + def indexBySistemaId(self, g_natureza_sistema_id_schema: GNaturezaSistemaIdSchema): + + # Importação da classe desejada + indexService = self.dynamic_import.service("g_natureza_index_by_sistema_id_service", "IndexBySistemaIdService") + + # Instância da classe service + self.indexService = indexService() + + # Lista todos os registros de natureza + return { + 'message': 'Registros de natureza localizados com sucesso', + 'data': self.indexService.execute(g_natureza_sistema_id_schema) + } # Busca um registro de natureza específico pelo ID diff --git a/packages/v1/administrativo/endpoints/g_natureza_endpoint.py b/packages/v1/administrativo/endpoints/g_natureza_endpoint.py index 55cd158..4bade8d 100644 --- a/packages/v1/administrativo/endpoints/g_natureza_endpoint.py +++ b/packages/v1/administrativo/endpoints/g_natureza_endpoint.py @@ -6,6 +6,7 @@ from packages.v1.administrativo.controllers.g_natureza_controller import GNature from packages.v1.administrativo.schemas.g_natureza_schema import ( GNaturezaSchema, GNaturezaSaveSchema, + GNaturezaSistemaIdSchema, GNaturezaUpdateSchema, GNaturezaIdSchema ) @@ -29,6 +30,25 @@ async def index(current_user: dict = Depends(get_current_user)): # Retorna os dados localizados return response +# Lista todos os registros de natureza +@router.get( + "/sistema/{sistema_id}", + status_code=status.HTTP_200_OK, + summary="Lista todos os registros de natureza cadastrados", + response_description="Lista todos os registros de natureza cadastrados" +) +async def index_by_sistema_id( + sistema_id: int, + current_user: dict = Depends(get_current_user) +): + # Cria o schema com os dados recebidos + natureza_schema = GNaturezaSistemaIdSchema(sistema_id=sistema_id) + + # Chama o controller (sem await) + response = g_natureza_controller.indexBySistemaId(natureza_schema) + + # Retorna os dados + return response # Localiza um registro de natureza pela descrição @router.get('/descricao', diff --git a/packages/v1/administrativo/repositories/g_natureza/g_natureza_index_by_sistema_id_repository.py b/packages/v1/administrativo/repositories/g_natureza/g_natureza_index_by_sistema_id_repository.py new file mode 100644 index 0000000..c01096e --- /dev/null +++ b/packages/v1/administrativo/repositories/g_natureza/g_natureza_index_by_sistema_id_repository.py @@ -0,0 +1,29 @@ +from abstracts.repository import BaseRepository +from api.packages.v1.administrativo.schemas.g_natureza_schema import GNaturezaSistemaIdSchema + +class IndexBySistemaIdRepository(BaseRepository): + """ + Repositório para a operação de listagem de todos os registros + na tabela g_natureza. + """ + + def execute(self, g_natureza_sistema_id_schema: GNaturezaSistemaIdSchema): + """ + 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 * FROM G_NATUREZA WHERE sistema_id = :sistema_id""" + + # Montagem de parÂmetros + params = { + 'sistema_id': g_natureza_sistema_id_schema.sistema_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/schemas/g_natureza_schema.py b/packages/v1/administrativo/schemas/g_natureza_schema.py index ed1bbcc..a5357d6 100644 --- a/packages/v1/administrativo/schemas/g_natureza_schema.py +++ b/packages/v1/administrativo/schemas/g_natureza_schema.py @@ -26,6 +26,11 @@ class GNaturezaSchema(BaseModel): class GNaturezaIdSchema(BaseModel): natureza_id: int +# ---------------------------------------------------- +# Schema para localizar uma NATUREZA especifica pelo ID (GET) +# ---------------------------------------------------- +class GNaturezaSistemaIdSchema(BaseModel): + sistema_id: int # ---------------------------------------------------- # Schema para localizar uma NATUREZA especifica pela descrição (GET) diff --git a/packages/v1/administrativo/services/g_natureza/go/g_natureza_index_by_sistema_id_service.py b/packages/v1/administrativo/services/g_natureza/go/g_natureza_index_by_sistema_id_service.py new file mode 100644 index 0000000..734354e --- /dev/null +++ b/packages/v1/administrativo/services/g_natureza/go/g_natureza_index_by_sistema_id_service.py @@ -0,0 +1,33 @@ +from fastapi import HTTPException, status +from api.packages.v1.administrativo.actions.g_natureza.g_natureza_index_by_sistema_id_action import IndexActionBySistemaId +from api.packages.v1.administrativo.schemas.g_natureza_schema import GNaturezaSistemaIdSchema + +class IndexBySistemaIdService: + """ + Serviço responsável por encapsular a lógica de negócio para a operação + de listagem de registros na tabela g_natureza. + """ + + def execute(self, g_natureza_sistema_id_schema: GNaturezaSistemaIdSchema): + """ + Executa a operação de busca de todos os registros no banco de dados. + + Returns: + A lista de registros encontrados. + """ + # Instanciamento da ação + index_action = IndexActionBySistemaId() + + # Executa a busca de todas as ações + data = index_action.execute(g_natureza_sistema_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 os registros de Natureza' + ) + + # Retorna as informações localizadas + return data \ No newline at end of file