Files
autoclip/backend/api/v1/processing.py
T
Kris Ka 8ee2d50044 修复WebSocket进度更新和前端状态自动更新问题
- 修复WebSocketNotificationService.send_processing_progress方法参数不匹配问题
- 修复前端RealTimeStatus组件WebSocket消息处理逻辑
- 修复Celery Worker队列配置,确保任务正确路由到processing队列
- 修复Celery应用导入冲突,统一使用正确的celery_app配置
- 添加实时项目状态更新功能,前端无需手动刷新即可看到处理进度
- 完善系统启动脚本,修复PYTHONPATH未绑定变量错误
- 优化流水线处理逻辑,确保所有6个步骤正常执行
- 添加完整的项目文档和启动指南

测试结果:
- WebSocket进度更新正常工作(16%, 33%, 100%)
- 流水线处理完全正常(6个步骤全部成功)
- 前端状态自动更新正常
- 项目状态正确同步到数据库
2025-09-08 17:21:31 +08:00

73 lines
2.4 KiB
Python

"""
处理API路由
"""
from typing import List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from ...core.database import get_db
from ...services.processing_service import ProcessingService
router = APIRouter()
def get_processing_service(db: Session = Depends(get_db)) -> ProcessingService:
"""Dependency to get processing service."""
return ProcessingService(db)
@router.post("/projects/{project_id}/process")
async def process_project(
project_id: str,
processing_service: ProcessingService = Depends(get_processing_service)
):
"""开始处理项目"""
try:
result = processing_service.process_project(project_id)
return {
"message": "项目处理已开始",
"project_id": project_id,
"result": result
}
except ValueError as e:
raise HTTPException(status_code=404, detail=str(e))
except FileNotFoundError as e:
raise HTTPException(status_code=400, detail=f"缺少必要文件: {str(e)}")
except Exception as e:
raise HTTPException(status_code=500, detail=f"处理失败: {str(e)}")
@router.get("/projects/{project_id}/processing-status")
async def get_processing_status(
project_id: str,
processing_service: ProcessingService = Depends(get_processing_service)
):
"""获取项目处理状态"""
try:
status = processing_service.get_processing_status(project_id)
return status
except Exception as e:
raise HTTPException(status_code=500, detail=f"获取状态失败: {str(e)}")
@router.post("/projects/{project_id}/process/step/{step_number}")
async def process_step(
project_id: str,
step_number: int,
processing_service: ProcessingService = Depends(get_processing_service)
):
"""处理单个步骤"""
if step_number < 1 or step_number > 6:
raise HTTPException(status_code=400, detail="步骤编号必须在1-6之间")
try:
# 这里可以扩展为处理单个步骤
result = processing_service.process_project(project_id)
return {
"message": f"步骤 {step_number} 处理完成",
"project_id": project_id,
"step": step_number,
"result": result
}
except Exception as e:
raise HTTPException(status_code=500, detail=f"步骤处理失败: {str(e)}")