Files
life-echo/api/routers/tasks.py
penghanyuan 3f899aa16c feat: 新增任务状态管理和API支持
- 添加任务状态API路由,支持获取当前用户的任务状态和待处理任务列表
- 实现任务追踪服务,使用Redis存储任务状态
- 更新回忆录处理逻辑,集成Celery任务提交和状态更新
- 增强测试用例,支持任务状态的获取和清除功能
- 优化代码结构,提升可读性和维护性
2026-01-21 23:37:00 +01:00

79 lines
2.0 KiB
Python

"""
任务状态 API 路由
"""
from typing import List, Dict
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from database.models import User as UserModel
from middleware.auth import get_current_user
from services.task_tracker import task_tracker
router = APIRouter(prefix="/api/tasks", tags=["tasks"])
class TaskInfo(BaseModel):
"""任务信息"""
task_id: str
task_type: str = "memoir"
status: str # pending, running, success, failure
created_at: str = None
updated_at: str = None
result: Dict = 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: UserModel = Depends(get_current_user)
):
"""
获取当前用户的任务状态汇总
用于检查后台任务是否全部完成
"""
status = await task_tracker.check_tasks_status(current_user.id)
tasks = await task_tracker.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: UserModel = Depends(get_current_user)
):
"""
获取当前用户的待处理任务列表
"""
tasks = await task_tracker.get_pending_tasks(current_user.id)
return {"pending_tasks": tasks}
@router.delete("/clear")
async def clear_tasks(
current_user: UserModel = Depends(get_current_user)
):
"""
清除当前用户的所有任务记录
"""
await task_tracker.clear_user_tasks(current_user.id)
return {"message": "任务记录已清除"}