Files
life-echo/api/app/features/tasks/router.py

79 lines
2.2 KiB
Python

"""
任务状态 API 路由
"""
from typing import Dict, List
from fastapi import APIRouter, Depends
from pydantic import BaseModel
from app.core.dependencies import get_current_user
from app.features.tasks.deps import get_tasks_service
from app.features.tasks.service import TasksService
from app.features.user.models import User
router = APIRouter(
prefix="/api/tasks",
tags=["tasks"],
responses={401: {"description": "认证失败"}},
)
class TaskInfo(BaseModel):
"""任务信息"""
task_id: str
task_type: str = "memoir"
status: str
created_at: str | None = None
updated_at: str | None = None
result: Dict | None = None
class TasksStatusResponse(BaseModel):
"""任务状态汇总响应"""
total: int
pending: int
running: int
success: int
failure: int
all_completed: bool
tasks: List[TaskInfo]
@router.get("/status", response_model=TasksStatusResponse)
async def get_tasks_status(
current_user: User = Depends(get_current_user),
service: TasksService = Depends(get_tasks_service),
):
"""获取当前用户的任务状态汇总,用于检查后台任务是否全部完成。"""
status = await service.check_tasks_status(current_user.id)
tasks = await service.get_user_tasks(current_user.id)
return TasksStatusResponse(
total=status["total"],
pending=status["pending"],
running=status["running"],
success=status["success"],
failure=status["failure"],
all_completed=status["all_completed"],
tasks=[TaskInfo(**t) for t in tasks],
)
@router.get("/pending")
async def get_pending_tasks(
current_user: User = Depends(get_current_user),
service: TasksService = Depends(get_tasks_service),
):
"""获取当前用户的待处理任务列表。"""
tasks = await service.get_pending_tasks(current_user.id)
return {"pending_tasks": tasks}
@router.delete("/clear")
async def clear_tasks(
current_user: User = Depends(get_current_user),
service: TasksService = Depends(get_tasks_service),
):
"""清除当前用户的所有任务记录。"""
await service.clear_user_tasks(current_user.id)
return {"message": "任务记录已清除"}