# 有声书编辑功能 - 实现计划

## 需求概述

| 需求 | 说明 |
|------|------|
| 书籍基础编辑 | 书名/作者/简介/封面修改、章节重排序/删除、单章节重新生成 |
| 创建流程回退 | 用户选错选项后可以返回修改，不重新开始 |

---

## 一、数据库变更

### 1.1 Book 模型 - 暂不修改
现有 `title, subtitle, description, coverUrl, targetAudience, style, bookScale` 字段已满足编辑需求，无需新增。

### 1.2 BookChapter 模型变更
```prisma
model BookChapter {
  // 新增字段
  sortOrder     Int      @default(0)           // 用于手动排序
  contentLock   Boolean  @default(false)        // 内容锁定标记（防止误改）
}
```

---

## 二、后端 API 设计

### 2.1 新增路由（album-management.controller.ts 扩展）

| 方法 | 路径 | 说明 |
|------|------|------|
| PUT | `/api/book-generator/books/:id` | 更新书籍基础信息 |
| PUT | `/api/book-generator/chapters/:id` | 更新单个章节（标题、内容、排序） |
| PUT | `/api/book-generator/chapters/:id/regenerate` | 重新生成章节内容 |
| POST | `/api/book-generator/chapters/:id/resort` | 批量重排章节顺序 |
| DELETE | `/api/book-generator/chapters/:id` | 删除章节 |

### 2.2 编辑边界规则

| genStage | 可编辑内容 | 可重新生成 |
|----------|-----------|-----------|
| `draft` / `outlining` | ✅ 全部 | ✅ 大纲 |
| `content_generating` | ✅ 全部 | ✅ 内容 |
| `content_completed` | ✅ 全部 | ✅ 内容 |
| `audio_generating` 及之后 | ⚠️ 仅标题/排序 | ❌ 需先回退 |

### 2.3 回退重生成协议
当用户在 `audio_completed` 阶段想修改内容：
1. 调用 `regenerateChapter(chapterId, 'content_completed')` 将阶段回退
2. 内容解锁，允许编辑
3. 重新生成时同步更新后续阶段

---

## 三、前端改动

### 3.1 详情页新增编辑入口（detail.vue）

```
详情页顶部操作区：
[编辑书籍] [删除书籍] [重新生成]
```

### 3.2 书籍编辑弹窗（基础信息）
- 书名、副标题、简介、封面（上传/URL）
- 面向人群、书籍类型、写作风格、行业领域

### 3.3 章节编辑
- 点击章节行内"✏️"进入编辑态
- 可修改：标题、内容（限制在content_completed前）、排序
- 章节操作：`上移/下移` `删除` `重新生成`

### 3.4 创建流程回退（create.vue）

**关键：create.vue 需要保存用户的选择状态到 storage 或后端**

新建 API：
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/book-generator/draft` | 保存创建草稿 |
| PUT | `/api/book-generator/draft/:id` | 更新草稿 |
| GET | `/api/book-generator/draft/:id` | 读取草稿 |

前端行为：
1. 用户填写创建表单 → 点击"创建书籍"前 → 自动保存草稿到后端
2. 用户点击"返回修改" → 读取草稿 → 填充表单
3. 用户重新选择选项 → 更新草稿 → 继续创建

---

## 四、分阶段实现

### Phase 1：后端编辑 API（P0）
- [ ] 扩展 `album-management.controller.ts` 新增 PUT `/books/:id`
- [ ] 新增 PUT `/chapters/:id`
- [ ] 新增 DELETE `/chapters/:id`
- [ ] 新增 POST `/chapters/:id/regenerate`（带阶段回退逻辑）
- [ ] 在 `stage-manager.ts` 补充回退重生成协议

### Phase 2：前端编辑界面（P0）
- [ ] detail.vue 顶部添加"编辑书籍"按钮
- [ ] 书籍编辑弹窗（支持书名/简介/封面修改）
- [ ] 章节行内编辑态（上移/下移/删除/重新生成）
- [ ] 编辑权限控制（genStage 限制）

### Phase 3：创建草稿与回退（P1）
- [ ] 后端新增 `/draft` 系列 API
- [ ] create.vue 创建前自动保存草稿
- [ ] 创建失败/用户返回时读取草稿继续编辑
- [ ] "上一步"按钮回到创建表单重新选择

### Phase 4：章节排序优化（P2）
- [ ] 新增 `sortOrder` 字段迁移
- [ ] 前端拖拽排序功能
- [ ] 后端批量更新排序

---

## 五、验证清单

- [ ] PUT `/api/book-generator/books/:id` 更新书名成功
- [ ] PUT `/api/book-generator/chapters/:id` 更新章节标题成功
- [ ] DELETE `/api/book-generator/chapters/:id` 删除章节成功
- [ ] audio_completed 阶段编辑内容时被阻止
- [ ] detail.vue 编辑弹窗正常打开/关闭
- [ ] 创建流程选择错误选项后可回退修改
- [ ] 章节重新生成后 genStage 正确回退