# microservice\api\api_v2\modules\pedimentos\routers.py from fastapi import APIRouter, BackgroundTasks, status, HTTPException from fastapi.responses import JSONResponse from .schemas import PedimentoCompletoRequestSchema from .tasks import process_pedimento_completo_request from .services import put_pedimento_data_vu from api.api_v2.modules.tasks.services import register_task import logging logger = logging.getLogger("app.api") router = APIRouter() @router.post("/services/pedimento_completo", status_code=status.HTTP_202_ACCEPTED) async def download_pedimento_completo(Pedimento: PedimentoCompletoRequestSchema): """ Endpoint para iniciar la descarga completa de un pedimento. """ pedimento_dict = Pedimento.model_dump() # Ejecuta la tarea de Celery de forma asíncrona task = process_pedimento_completo_request.delay(pedimento_dict) return { "status": "submitted", "detail": "La solicitud de descarga del pedimento completo ha sido enviada.", "task_id": task.id } @router.post("/services/auditar_pedimento_completo", status_code=status.HTTP_202_ACCEPTED) async def auditar_pedimento_completo(Pedimento: PedimentoCompletoRequestSchema): """ Endpoint para auditar la descarga completa de un pedimento vu. Versión sincrónica que llama directamente al servicio. """ try: # Convertir el modelo Pydantic a diccionario pedimento_dict = Pedimento.model_dump() # Llamar directamente al servicio result = await put_pedimento_data_vu(**pedimento_dict) return { "status": "completed", "detail": "La descarga del pedimento completo se ha completado exitosamente.", "result": { "documento": result.get("documento"), "xml_content": result.get("xml_content"), } } # return { # "status": "completed", # "detail": "La descarga del pedimento completo se ha completado exitosamente.", # "result": { # "documento": "Simulated Documento Content", # "xml_content": "Simulated XML Content", # } # } except HTTPException as e: raise e except Exception as e: logger.error(f"Error inesperado en auditar_pedimento_completo: {e}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Error interno del servidor auditar pedimento completo: {str(e)}" )