2025-10-11 15:02:24 +08:00
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
|
|
|
|
2026-03-17 10:16:44 +08:00
|
|
|
from yuxi.storage.postgres.models_business import User
|
|
|
|
|
from yuxi.services.task_service import tasker
|
2025-10-11 15:02:24 +08:00
|
|
|
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),
|
2025-10-25 14:55:06 +08:00
|
|
|
limit: int = Query(default=100, ge=1, le=100),
|
2025-10-11 15:02:24 +08:00
|
|
|
current_user: User = Depends(get_admin_user),
|
|
|
|
|
):
|
|
|
|
|
"""List tasks, optionally filtered by status."""
|
2025-10-25 14:55:06 +08:00
|
|
|
return await tasker.list_tasks(status=status, limit=limit)
|
2025-10-11 15:02:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@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"}
|
2026-01-25 23:47:40 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@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"}
|