import boto3 from fastapi import APIRouter, Depends from backend.app.dependencies import validate_token from backend.app.plan.schemas import PlanTriggerRequest from backend.app.config import get_settings from utils.logger import setup_logger logger = setup_logger() router = APIRouter( prefix="/plan", tags=["plan"], dependencies=[Depends(validate_token)], responses={404: {"description": "Not found"}} ) sqs_client = boto3.client("sqs") @router.post("/trigger", status_code=202) async def trigger_plan_entrypoint(body: PlanTriggerRequest): """ Entry point for triggering the plan engine via SQS. """ logger.info("API triggered with body: %s", body) settings = get_settings() # Serialize the PlanTriggerRequest into JSON try: message_body = body.model_dump_json() except Exception as e: logger.error("Failed to serialize request body: %s", e) return {"message": "Invalid request"}, 400 try: response = sqs_client.send_message( QueueUrl=settings.ENGINE_SQS_URL, MessageBody=message_body ) logger.info(f"SQS message sent. Message ID: {response.get('MessageId')}") except Exception as e: logger.error("Failed to send SQS message: %s", e) return {"message": "Failed to trigger engine"}, 500 return {"message": "Plan job accepted"}