""" 任务状态 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": "任务记录已清除"}