monitoring-api/packages/v1/administrativo/endpoints/client_endpoint.py

120 lines
No EOL
4.1 KiB
Python

# Importação de bibliotecas
from typing import Optional
from fastapi import APIRouter, Body, Depends, status, Query
from actions.jwt.get_current_user import get_current_user
# Adaptação para o Controller de Cliente
from packages.v1.administrativo.controllers.client_controller import ClientController
# Adaptação para os Schemas de Cliente
from packages.v1.administrativo.schemas.client_schema import (
ClientSchema,
ClientSaveSchema,
ClientUpdateSchema,
ClientIdSchema,
ClientCNSSchema # Usado para busca por 'cns'
)
# Inicializa o roteador para as rotas de cliente
router = APIRouter()
# Instânciamento do controller desejado
client_controller = ClientController()
# Lista todos os clientes com paginação
@router.get('/',
status_code=status.HTTP_200_OK,
summary='Lista todos os clientes cadastrados com paginação',
response_description='Lista todos os clientes cadastrados')
async def index(
first: int = Query(20, description="Total de registros por página (LIMIT)"),
skip: int = Query(0, description="Total de registros a pular (OFFSET)"),
current_user: dict = Depends(get_current_user)
):
# Busca todos os clientes cadastrados, passando os parâmetros de paginação
response = client_controller.index(first=first, skip=skip)
# Retorna os dados localizados com os metadados de paginação
return response
# Busca cliente pelo ID (show)
@router.get('/{client_id}',
status_code=status.HTTP_200_OK,
summary='Busca um cliente específico pelo ID',
response_description='Busca registro específico do cliente')
async def show(client_id: int, current_user: dict = Depends(get_current_user)):
# Cria o schema com o ID recebido
client_schema = ClientSchema(client_id=client_id)
# Busca um cliente específico pelo ID
response = client_controller.show(client_schema)
# Retorna os dados localizados
return response
# Busca cliente pelo CNS
@router.get('/cns/{cns}',
status_code=status.HTTP_200_OK,
summary='Busca um cliente específico pelo CNS',
response_description='Busca registro específico do cliente pelo CNS')
async def get_by_cns(cns: str, current_user: dict = Depends(get_current_user)):
# Cria o schema com o CNS recebido
client_schema = ClientCNSSchema(cns=cns)
# Busca um cliente específico pelo CNS
response = client_controller.getByCns(client_schema)
# Retorna os dados localizados
return response
# Cadastra um novo cliente
@router.post('/',
status_code=status.HTTP_201_CREATED,
summary='Cadastra um novo cliente',
response_description='Cadastra um novo cliente')
async def save(client_schema: ClientSaveSchema = Body(...), current_user: dict = Depends(get_current_user)):
# Executa a ação de save
response = client_controller.save(client_schema)
# Retorna o ID do registro salvo
return response
# Atualiza um cliente existente
@router.put('/{client_id}',
status_code=status.HTTP_200_OK,
summary='Atualiza um cliente existente',
response_description='Atualiza um cliente existente')
async def update(client_id: int, client_schema: ClientUpdateSchema = Body(...), current_user: dict = Depends(get_current_user)):
# Executa a ação de update
response = client_controller.update(client_id, client_schema)
# Retorna o resultado da operação
return response
# Deleta um cliente
@router.delete('/{client_id}',
status_code=status.HTTP_200_OK,
summary='Deleta um cliente',
response_description='Deleta um cliente')
async def delete(client_id: int, current_user: dict = Depends(get_current_user)):
# Cria o schema apenas com o ID para deleção
client_schema = ClientIdSchema(client_id=client_id)
# Executa a ação de delete
response = client_controller.delete(client_schema)
# Retorna o resultado da operação
return response
# Rotas específicas de Log (getGed, getServer, getDatabase, getBackup, getDisk, getWarning) foram removidas
# por não se aplicarem à entidade 'client'.