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

79 lines
2.2 KiB
Python
Raw Normal View History

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