from fastapi import APIRouter, HTTPException from .schemas import CoveListSchema, CoveRequestSchema from typing import List, Dict, Any from uuid import UUID from .tasks import process_cove_request, process_acuse_cove_request from ..tasks.services import register_task router = APIRouter() # Aquí puedes definir tus endpoints relacionados con COVES usando el esquema CoveBaseSchema @router.post("/services/cove/", response_model=Dict[str, Any]) async def get_cove(cove: CoveRequestSchema): """Endpoint para obtener un COVE específico.""" cove_dict = cove.model_dump() task = process_cove_request.delay(cove_dict) # Registrar la tarea en el servicio de seguimiento await register_task( task_id=task.id, message=f"Procesando COVE para pedimento {cove_dict.get('pedimento', {}).get('pedimento_app', 'N/A')}", status="submitted", pedimento_id=cove_dict.get('pedimento', {}).get('id'), organizacion_id=cove_dict.get('pedimento', {}).get('organizacion'), servicio=8 # 8 corresponde a "Cove" ) return {"task_id": task.id, "status": "submitted"} @router.post("/services/all/coves", response_model=Dict[str, Any]) async def get_coves(coves_request: CoveListSchema): """Endpoint para obtener múltiples COVEs asociados a un pedimento.""" task_ids = [] coves_dict = coves_request.model_dump() pedimento = coves_dict.get('pedimento', {}) for cove in coves_dict.get('coves', []): cove_dict = { "cove": cove, "pedimento": pedimento, "credencial": coves_dict.get('credencial') } task = process_cove_request.delay(cove_dict) task_ids.append(task.id) # Registrar cada tarea en el servicio de seguimiento await register_task( task_id=task.id, message=f"Procesando COVE masivo para pedimento {pedimento.get('pedimento_app', 'N/A')}", status="submitted", pedimento_id=pedimento.get('id'), organizacion_id=pedimento.get('organizacion'), servicio=8 # 8 corresponde a "Cove" ) return {"task_ids": task_ids, "status": "submitted", "total": len(task_ids)} @router.post("/services/acuse/cove/", response_model=Dict[str, Any]) async def get_acuse_cove(cove: CoveRequestSchema): """Endpoint para obtener el acuse de un COVE específico.""" cove_dict = cove.model_dump() task = process_acuse_cove_request.delay(cove_dict) # Registrar la tarea en el servicio de seguimiento await register_task( task_id=task.id, message=f"Procesando acuse de COVE para pedimento {cove_dict.get('pedimento', {}).get('pedimento_app', 'N/A')}", status="submitted", pedimento_id=cove_dict.get('pedimento', {}).get('id'), organizacion_id=cove_dict.get('pedimento', {}).get('organizacion'), servicio=9 # 9 corresponde a "Acuse Cove" ) return {"task_id": task.id, "status": "submitted"} @router.post("/services/all/acuse/cove/", response_model=Dict[str, Any]) async def get_acuses_cove(coves_request: CoveListSchema): """Endpoint para obtener los acuses de múltiples COVEs asociados a un pedimento.""" task_ids = [] coves_dict = coves_request.model_dump() pedimento = coves_dict.get('pedimento', {}) for cove in coves_dict.get('coves', []): acuse_dict = { "cove": cove, "pedimento": pedimento, "credencial": coves_dict.get('credencial') } task = process_acuse_cove_request.delay(acuse_dict) task_ids.append(task.id) # Registrar cada tarea en el servicio de seguimiento await register_task( task_id=task.id, message=f"Procesando acuse masivo de COVE para pedimento {pedimento.get('pedimento_app', 'N/A')}", status="submitted", pedimento_id=pedimento.get('id'), organizacion_id=pedimento.get('organizacion'), servicio=9 # 9 corresponde a "Acuse Cove" ) return {"task_ids": task_ids, "status": "submitted", "total": len(task_ids)}