""" 任务管理V2路由 提供统一的任务查询和管理API端点 """ from typing import List from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app.database import get_db from app.models.user import User from app.middleware import get_current_user_from_request from app.schemas.model_schema import ApiResponse from app.schemas.audio_v2 import ( TaskStatusResponse, BatchDeleteRequest, BatchDeleteResponse, UserAudioStatisticsResponse ) from app.services.audio_v2 import TaskManager router = APIRouter(prefix="/tasks", tags=["任务管理V2"]) @router.get("/{task_id}/status", response_model=ApiResponse[TaskStatusResponse]) def get_task_status( task_id: str, db: Session = Depends(get_db), current_user: User = Depends(get_current_user_from_request) ): """ 查询任务状态(跨所有任务类型) 根据task_id查询任务状态,自动识别任务类型 Args: task_id: 任务ID Returns: 任务状态信息(包含状态、进度、错误信息等) """ manager = TaskManager(db, current_user.id) result = manager.get_task_status(task_id) return ApiResponse( code=200, message="success", data=result ) @router.delete("/{task_id}/cancel", response_model=ApiResponse[bool]) def cancel_task( task_id: str, db: Session = Depends(get_db), current_user: User = Depends(get_current_user_from_request) ): """ 取消任务(仅PENDING状态可取消) Args: task_id: 任务ID Returns: 是否成功取消 """ manager = TaskManager(db, current_user.id) result = manager.cancel_task(task_id) return ApiResponse( code=200, message="任务已取消", data=result ) @router.delete("/{task_id}", response_model=ApiResponse[bool]) def delete_task( task_id: str, db: Session = Depends(get_db), current_user: User = Depends(get_current_user_from_request) ): """ 删除任务记录 Args: task_id: 任务ID Returns: 是否成功删除 """ manager = TaskManager(db, current_user.id) result = manager.delete_task(task_id) return ApiResponse( code=200, message="任务已删除", data=result ) @router.post("/batch-delete", response_model=ApiResponse[BatchDeleteResponse]) def batch_delete_tasks( request: BatchDeleteRequest, db: Session = Depends(get_db), current_user: User = Depends(get_current_user_from_request) ): """ 批量删除任务 Args: request: 批量删除请求(包含task_ids列表) Returns: 删除结果统计(成功数、失败数、失败详情) """ manager = TaskManager(db, current_user.id) result = manager.batch_delete_tasks(request.task_ids) return ApiResponse( code=200, message=f"批量删除完成,成功{result['success_count']}个,失败{result['failed_count']}个", data=BatchDeleteResponse(**result) ) @router.get("/statistics", response_model=ApiResponse[UserAudioStatisticsResponse]) def get_user_statistics( db: Session = Depends(get_db), current_user: User = Depends(get_current_user_from_request) ): """ 获取用户语音统计信息 包含语音识别、语音合成、声音克隆、长文本转音频的统计数据 Returns: 用户语音统计信息(各类任务的数量、费用等) """ manager = TaskManager(db, current_user.id) result = manager.get_user_statistics() return ApiResponse( code=200, message="success", data=result )