2026-03-31 15:50:42 +08:00
|
|
|
"""任务队列 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):
|
2026-03-31 22:36:18 +08:00
|
|
|
t = await db.get_task(task_id)
|
|
|
|
|
if not t:
|
2026-03-31 15:50:42 +08:00
|
|
|
raise HTTPException(404, "Task not found")
|
|
|
|
|
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}
|