Criação do endpoint lista de logs pelo ID do cliente

This commit is contained in:
Kenio 2025-10-17 09:21:37 -03:00
parent 540d11899e
commit bb12138442
5 changed files with 113 additions and 2 deletions

View file

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

View file

@ -102,6 +102,22 @@ class LogController:
} }
} }
# 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) # Busca um log específico pelo ID (log_id)
def show(self, log_schema: LogSchema): def show(self, log_schema: LogSchema):

View file

@ -52,6 +52,19 @@ async def getFile(file: str, current_user: dict = Depends(get_current_user)):
# Retorna os dados localizados # Retorna os dados localizados
return response 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 # Localiza um log pelo ID
@router.get('/{log_id}', @router.get('/{log_id}',
status_code=status.HTTP_200_OK, 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)): async def show(log_id: int, current_user: dict = Depends(get_current_user)):
# Cria o schema com os dados recebidos # 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 # Busca um log específico pelo ID
response = log_controller.show(log_schema) 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 # Retorna os dados localizados
return response return response
# Cadastro de logs # Cadastro de logs
@router.post('/', @router.post('/',
status_code=status.HTTP_201_CREATED, # Alterado para 201 Created, mais apropriado para POST status_code=status.HTTP_201_CREATED, # Alterado para 201 Created, mais apropriado para POST

View file

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

View file

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