"""任务队列 API""" from fastapi import APIRouter, HTTPException from app import database as db from app.models import TaskCreate, TaskOut router = APIRouter() @router.get("", response_model=list[TaskOut]) async def list_tasks(status: str | None = None, limit: int = 50): return await db.list_tasks(status=status, limit=limit) @router.post("", response_model=dict) async def create_task(body: TaskCreate): return await db.create_task( task_type=body.task_type, request_payload=body.request_payload, plan_id=body.plan_id, priority=body.priority, max_retries=body.max_retries, callback_url=body.callback_url, ) @router.get("/{task_id}", response_model=TaskOut) async def get_task(task_id: str): d = await db.get_db() cur = await d.execute("SELECT * FROM tasks WHERE id=?", (task_id,)) row = await cur.fetchone() if not row: raise HTTPException(404, "Task not found") t = db.row_to_dict(row) t["request_payload"] = db._parse_json(t["request_payload"], {}) t["response_payload"] = db._parse_json(t.get("response_payload")) return t @router.post("/{task_id}/cancel") async def cancel_task(task_id: str): ok = await db.update_task(task_id, status="cancelled") if not ok: raise HTTPException(404, "Task not found") return {"ok": True}