# Importação de bibliotecas from typing import List from typing import Optional from fastapi import APIRouter, Body, Depends, status from actions.jwt.get_current_user import get_current_user from packages.v1.administrativo.controllers.ato_principal_controller import ( AtoPrincipalController, ) from packages.v1.administrativo.schemas.ato_principal_schema import ( AtoPrincipalSchema, AtoPrincipalSaveSchema, AtoPrincipalUpdateSchema, AtoPrincipalIdSchema, ) # Inicializa o roteador para as rotas de ato principal router = APIRouter() # Instânciamento do controller desejado ato_principal_controller = AtoPrincipalController() # Lista todos os atos principais @router.get( "/", status_code=status.HTTP_200_OK, summary="Lista todos os atos principais cadastrados", response_description="Lista todos os atos principais cadastrados", ) async def index(current_user: dict = Depends(get_current_user)): # Busca todos os atos principais cadastrados response = ato_principal_controller.index() # Retorna os dados localizados return response # Localiza um ato principal pelo ID @router.get( "/{ato_principal_id}", status_code=status.HTTP_200_OK, summary="Busca um registro em especifico pelo ID do ato principal", response_description="Busca um registro em especifico", ) async def show(ato_principal_id: int, current_user: dict = Depends(get_current_user)): # Cria o schema com os dados recebidos ato_principal_schema = AtoPrincipalIdSchema(ato_principal_id=ato_principal_id) # Busca um ato principal especifico pelo ID response = ato_principal_controller.show(ato_principal_schema) # Retorna os dados localizados return response # Cadastro de múltiplos itens @router.post( "/batch", status_code=status.HTTP_200_OK, summary="Cadastra múltiplos atos principais", response_description="Cadastra vários atos principais de uma vez", ) async def save_multiple( atos_principais: List[AtoPrincipalSaveSchema], current_user: dict = Depends(get_current_user), ): # A lista completa (List[AtoPrincipalSaveSchema]) é passada # DIRETAMENTE para o controller (que a passará ao Service, Action e Repository). # O loop de iteração deve estar APENAS no Repository. responses = ato_principal_controller.save_multiple(atos_principais) return {"success": True, "data": responses} # Cadastro de ato principal @router.post( "/", status_code=status.HTTP_200_OK, summary="Cadastra um ato principal", response_description="Cadastra um ato principal", ) async def save( ato_principal_schema: AtoPrincipalSaveSchema, current_user: dict = Depends(get_current_user), ): # Efetua o cadastro do ato principal junto ao banco de dados response = ato_principal_controller.save(ato_principal_schema) # Retorna os dados localizados return response # Atualiza os dados de ato principal @router.put( "/{ato_principal_id}", status_code=status.HTTP_200_OK, summary="Atualiza um ato principal", response_description="Atualiza um ato principal", ) async def update( ato_principal_id: int, ato_principal_schema: AtoPrincipalUpdateSchema, current_user: dict = Depends(get_current_user), ): # Efetua a atualização dos dados de ato principal response = ato_principal_controller.update(ato_principal_id, ato_principal_schema) # Retorna os dados localizados return response # Exclui um determinado ato principal @router.delete( "/{ato_principal_id}", status_code=status.HTTP_200_OK, summary="Remove um ato principal", response_description="Remove um ato principal", ) async def delete(ato_principal_id: int, current_user: dict = Depends(get_current_user)): # Cria o schema com os dados recebidos ato_principal_schema = AtoPrincipalIdSchema(ato_principal_id=ato_principal_id) # Efetua a exclusão de um determinado ato principal response = ato_principal_controller.delete(ato_principal_schema) # Retorna os dados localizados return response