# OPT-02: 轮询超时修复（WebSocket 推送）

## 任务目标
后端实现 WebSocket 推送 `audio_generation_complete`、`video_generation_complete` 事件，替代前端 30s 超时限制。

## 涉及文件
- 新建: `server/src/services/websocket.service.ts` - WebSocket 服务
- 修改: `server/src/modules/tts/tts.service.ts` - 音频生成完成后推送
- 修改: `server/src/modules/video-generator/video-generator.service.ts` - 视频生成完成后推送
- 修改: `server/src/app.ts` - 挂载 WebSocket 服务

## WebSocket 事件格式（按 api-contracts.md）
```typescript
// audio_generation_complete
{ bookId: string, chapterId: number, status: 'completed' | 'failed' }

// video_generation_complete
{ bookId: string, chapterId: number, status: 'completed' | 'failed' }
```

## 实现步骤
1. 创建 WebSocket 服务（基于 ws 库）
2. 在 app.ts 中挂载 WebSocket 到 /ws 路径
3. TTS 回调完成后通过 WebSocket 推送事件
4. 视频生成完成后通过 WebSocket 推送事件

## 状态
- [x] 创建 WebSocket 服务
- [ ] 在 app.ts 挂载 WebSocket
- [ ] TTS 完成后推送 audio_generation_complete
- [ ] 视频生成完成后推送 video_generation_complete
- [ ] 更新 api-contracts.md（如需要）