Criação do endpoint lista de logs pelo ID do cliente
This commit is contained in:
parent
540d11899e
commit
bb12138442
5 changed files with 113 additions and 2 deletions
30
packages/v1/administrativo/actions/log/log_client_action.py
Normal file
30
packages/v1/administrativo/actions/log/log_client_action.py
Normal 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
|
||||
|
|
@ -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)
|
||||
def show(self, log_schema: LogSchema):
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
Loading…
Add table
Reference in a new issue