ForcePilot/backend/server/routers/system_task_router.py

45 lines
1.5 KiB
Python
Raw Permalink Normal View History

from fastapi import APIRouter, Depends, HTTPException, Query
from yuxi.storage.postgres.models_business import User
from yuxi.services.task_service import tasker
from server.utils.auth_middleware import get_admin_user
tasks = APIRouter(prefix="/tasks", tags=["tasks"])
@tasks.get("")
async def list_tasks(
status: str | None = Query(default=None),
limit: int = Query(default=100, ge=1, le=100),
current_user: User = Depends(get_admin_user),
):
"""List tasks, optionally filtered by status."""
return await tasker.list_tasks(status=status, limit=limit)
@tasks.get("/{task_id}")
async def get_task(task_id: str, current_user: User = Depends(get_admin_user)):
"""Retrieve a single task by id."""
task = await tasker.get_task(task_id)
if not task:
raise HTTPException(status_code=404, detail="Task not found")
return {"task": task}
@tasks.post("/{task_id}/cancel")
async def cancel_task(task_id: str, current_user: User = Depends(get_admin_user)):
"""Request cancellation of a task."""
success = await tasker.cancel_task(task_id)
if not success:
raise HTTPException(status_code=400, detail="Task cannot be cancelled")
return {"task_id": task_id, "status": "cancelled"}
@tasks.delete("/{task_id}")
async def delete_task(task_id: str, current_user: User = Depends(get_admin_user)):
"""Delete a task by id."""
success = await tasker.delete_task(task_id)
if not success:
raise HTTPException(status_code=404, detail="Task not found")
return {"task_id": task_id, "status": "deleted"}