diff --git a/packages/v1/administrativo/actions/log/log_client_action.py b/packages/v1/administrativo/actions/log/log_client_action.py new file mode 100644 index 0000000..c4561d4 --- /dev/null +++ b/packages/v1/administrativo/actions/log/log_client_action.py @@ -0,0 +1,30 @@ +from abstracts.action import BaseAction +from packages.v1.administrativo.schemas.log_schema import LogClientIdSchema +from packages.v1.administrativo.repositories.log.log_show_repository import LogClientRepository + + +class LogClientAction(BaseAction): + """ + Action responsável por orquestrar a visualização (show) de um registro + único na tabela 'log', geralmente utilizando o 'log_id'. + """ + + def execute(self, log_schema: LogClientIdSchema): + """ + Executa a lógica de busca e exibição do log. + + O schema 'LogClientIdSchema' é usado para transportar o 'client_id', que + será o critério principal para buscar os dados completos + (client_id, date_post, file) do log. + + :param log_schema: Schema contendo o ID do log a ser exibido. + :return: O registro de log encontrado ou None/erro. + """ + # Instânciamento do repositório de visualização (show) + client_repository = LogClientRepository() + + # Execução do repositório + response = client_repository.execute(log_schema) + + # Retorno da informação + return response \ No newline at end of file diff --git a/packages/v1/administrativo/controllers/log_controller.py b/packages/v1/administrativo/controllers/log_controller.py index a878d0f..9327900 100644 --- a/packages/v1/administrativo/controllers/log_controller.py +++ b/packages/v1/administrativo/controllers/log_controller.py @@ -101,6 +101,22 @@ class LogController: 'skip': skip # Registros pulados } } + + + # Busca um log específico pelo client_id + def logClient(self, log_schema: LogClientIdSchema): + + #Importação da classe desejada + cliente_service = self.dynamic_import.service('log_cliente_service', 'LogClientService') + + # Instânciamento da classe desejada + self.cliente_service = cliente_service() + + # Busca e retorna o log desejado + return { + 'message': 'Log\'s localizados com sucesso', + 'data': self.cliente_service.execute(log_schema) + } # Busca um log específico pelo ID (log_id) def show(self, log_schema: LogSchema): diff --git a/packages/v1/administrativo/endpoints/log_endpoint.py b/packages/v1/administrativo/endpoints/log_endpoint.py index ce967f9..32e08c8 100644 --- a/packages/v1/administrativo/endpoints/log_endpoint.py +++ b/packages/v1/administrativo/endpoints/log_endpoint.py @@ -52,6 +52,19 @@ async def getFile(file: str, current_user: dict = Depends(get_current_user)): # Retorna os dados localizados return response +# Lista todos os logs de um determinado cliente +@router.get('/client/{client_id}', + status_code=status.HTTP_200_OK, + summary='Lista todos os logs cadastrados de um determinado cliente', + response_description='Lista todos os logs cadastrados de um cliente específico') +async def logClient(client_id: int, current_user: dict = Depends(get_current_user)): + + # Busca todos os logs cadastrados, passando os parâmetros de paginação + response = log_controller.logClient(client_id=client_id) + + # Retorna os dados localizados com os metadados de paginação + return response + # Localiza um log pelo ID @router.get('/{log_id}', status_code=status.HTTP_200_OK, @@ -60,7 +73,7 @@ async def getFile(file: str, current_user: dict = Depends(get_current_user)): async def show(log_id: int, current_user: dict = Depends(get_current_user)): # Cria o schema com os dados recebidos - log_schema = LogIdSchema(log_id=log_id) + log_schema = LogClientIdSchema(log_id=log_id) # Busca um log específico pelo ID response = log_controller.show(log_schema) @@ -68,7 +81,6 @@ async def show(log_id: int, current_user: dict = Depends(get_current_user)): # Retorna os dados localizados return response - # Cadastro de logs @router.post('/', status_code=status.HTTP_201_CREATED, # Alterado para 201 Created, mais apropriado para POST diff --git a/packages/v1/administrativo/repositories/log/log_client_repository.py b/packages/v1/administrativo/repositories/log/log_client_repository.py new file mode 100644 index 0000000..05a71d0 --- /dev/null +++ b/packages/v1/administrativo/repositories/log/log_client_repository.py @@ -0,0 +1,29 @@ +from abstracts.repository import BaseRepository +from packages.v1.administrativo.schemas.log_schema import LogClientIdSchema + + +class LogClientRepository(BaseRepository): + """ + Repositório responsável por buscar um registro único na tabela 'log' + utilizando a chave primária 'client_id'. + """ + + def execute(self, log_schema: LogClientIdSchema): + """ + Executa a busca de um log pelo seu ID. + + :param log_schema: Schema contendo o client_id. + :return: O registro de log encontrado ou None. + """ + + # Montagem do sql. O SELECT * retorna todos os campos da DDL: + # client_id, client_id, date_post, file. + sql = """ SELECT * FROM log l WHERE l.client_id = :clientId """ + + # Preenchimento de parâmetros + params = { + 'clientId' : log_schema.client_id + } + + # Execução do sql para buscar um único registro + return self.fetch_one(sql, params) \ No newline at end of file diff --git a/packages/v1/administrativo/services/log/log_client_service.py b/packages/v1/administrativo/services/log/log_client_service.py new file mode 100644 index 0000000..44a0242 --- /dev/null +++ b/packages/v1/administrativo/services/log/log_client_service.py @@ -0,0 +1,24 @@ +from fastapi import HTTPException, status +from packages.v1.administrativo.schemas.log_schema import LogClientIdSchema +from packages.v1.administrativo.actions.log.log_show_action import LogClientAction + +class LogClientService: + + # O método execute deve receber o esquema que contém a ID do log a ser buscado + def execute(self, log_schema: LogClientIdSchema): + + # Instanciamento de ação com prefixo 'log' + log_client_action = LogClientAction() + + # Executa a ação em questão (buscando pelo log_id) + data = log_client_action.execute(log_schema) + + 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 log\'s' + ) + + # Retorno da informação (log_id, client_id, date_post, file) + return data \ No newline at end of file