62 lines
2.8 KiB
Python
62 lines
2.8 KiB
Python
from fastapi import APIRouter, HTTPException, Depends
|
|
from fastapi.responses import JSONResponse
|
|
from typing import Dict, Any, List, Optional
|
|
|
|
|
|
|
|
from api.api_v2.modules.authentication.services import get_current_user
|
|
from api.api_v2.modules.tasks.services import register_task
|
|
from .schemas import PartidaRequestSchema, PartidaListSchema
|
|
from .tasks import process_partida_request
|
|
|
|
router = APIRouter()
|
|
|
|
@router.post("/services/partida/", response_model=Dict[str, Any])
|
|
async def obtener_partida(partida_request: PartidaRequestSchema):
|
|
"""
|
|
Endpoint para obtener la información de una partida específica.
|
|
"""
|
|
|
|
acuse_dict = partida_request.model_dump()
|
|
# Ejecuta la tarea de Celery de forma asíncrona
|
|
task = process_partida_request.delay(acuse_dict)
|
|
# Registrar la tarea en el servicio de seguimiento
|
|
await register_task(
|
|
task_id=task.id,
|
|
message=f"Procesando partida {acuse_dict.get('partida', {}).get('numero', 'N/A')} para pedimento {acuse_dict.get('pedimento', {}).get('pedimento_app', 'N/A')}",
|
|
status="submitted",
|
|
pedimento_id=acuse_dict.get('pedimento', {}).get('id'),
|
|
organizacion_id=acuse_dict.get('pedimento', {}).get('organizacion'),
|
|
servicio=4 # 4 corresponde a "Pedimento Partidas"
|
|
)
|
|
# Puedes devolver el ID de la tarea para consultar el estado después
|
|
return {"task_id": task.id, "status": "submitted"}
|
|
|
|
@router.post("/services/all/partidas/", response_model=Dict[str, Any])
|
|
async def obtener_partidas(partidas_request: PartidaListSchema):
|
|
"""
|
|
Endpoint para iniciar la descarga masiva de partidas.
|
|
"""
|
|
task_ids = []
|
|
partida_request_dict = partidas_request.model_dump()
|
|
# Para cada partida en la lista, dispara una tarea Celery
|
|
for partida in partida_request_dict.get('partidas', []):
|
|
# Crea un nuevo diccionario de datos para cada tarea
|
|
partida_dict = {
|
|
"partida": partida,
|
|
"pedimento": partida_request_dict.get('pedimento'),
|
|
"credencial": partida_request_dict.get('credencial')
|
|
}
|
|
task = process_partida_request.delay(partida_dict)
|
|
task_ids.append(task.id)
|
|
# Registrar cada tarea en el servicio de seguimiento
|
|
await register_task(
|
|
task_id=task.id,
|
|
message=f"Procesando partida masiva {partida.get('numero', 'N/A')} para pedimento {partida_request_dict.get('pedimento', {}).get('pedimento_app', 'N/A')}",
|
|
status="submitted",
|
|
pedimento_id=partida_request_dict.get('pedimento', {}).get('id'),
|
|
organizacion_id=partida_request_dict.get('pedimento', {}).get('organizacion'),
|
|
servicio=4 # 4 corresponde a "Pedimento Partidas"
|
|
)
|
|
|
|
return {"task_ids": task_ids, "status": "submitted", "total": len(task_ids)} |