MirrorAPI/packages/v1/administrativo/endpoints/ato_principal_endpoint.py
2025-11-03 15:18:26 -03:00

132 lines
4 KiB
Python

# 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