| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- """
- 任务管理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
- )
|