from fastapi import APIRouter, HTTPException, Depends from typing import Dict, Any, Optional from .schemas import EdocumentsSchema, EdocumentsMasivoSchema from .tasks import process_edoc_download_request from api.api_v2.modules.authentication.services import get_current_user from api.api_v2.modules.tasks.services import register_task router = APIRouter() # --- Nuevas rutas para la descarga de edocs --- @router.post("/services/download/edoc/", response_model=Dict[str, Any]) async def download_edoc(edoc_request: EdocumentsSchema): """ Endpoint para iniciar la descarga de un documento electrónico (edoc). """ edoc_dict = edoc_request.model_dump() # Ejecuta la tarea de Celery de forma asíncrona task = process_edoc_download_request.delay(edoc_dict) # Devuelve el ID de la tarea return {"task_id": task.id, "status": "submitted"} @router.post("/services/download/all/edocs/", response_model=Dict[str, Any]) async def download_edocs_masivo(edoc_request: EdocumentsMasivoSchema): """ Endpoint para iniciar la descarga masiva de documentos electrónicos (edocs). """ task_ids = [] edoc_request_dict = edoc_request.model_dump() # Para cada edoc en la lista, dispara una tarea Celery for edoc in edoc_request_dict.get('edocs', []): # Crea un nuevo diccionario de datos para cada tarea edoc_dict = { "pedimento": edoc_request_dict.get('pedimento'), "credencial": edoc_request_dict.get('credencial'), "edoc": edoc } task = process_edoc_download_request.delay(edoc_dict) task_ids.append(task.id) return {"task_ids": task_ids, "status": "submitted", "total": len(task_ids)}