# 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'.