Files
microservice/api/api_v2/modules/pedimentos/routers.py

69 lines
2.5 KiB
Python

# 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)}"
)