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