# AI有声书生成工具 - 第二期开发计划

## 产品定位

基于MVP阶段的文本转语音核心功能，第二期聚焦**体验增强**，提升用户粘性和付费转化。

## 功能优先级

### P1 - 核心体验（第一阶段）

| 功能 | 描述 | 前端 | 后端 | 测试重点 |
|------|------|------|------|----------|
| 播放记录 | 记录播放进度，支持续播 | player页面 | API | 续播准确性 |
| 收藏功能 | 收藏喜欢的音频 | favorites页面 | API | 收藏列表CRUD |
| 定时关闭 | 睡眠定时、15/30/60分钟自动停止 | player页面 | - | 定时器准确性 |
| 播放速度记忆 | 0.5x-2x速听，记忆用户偏好 | player页面 | API | 偏好持久化 |
| 分享功能 | 分享给微信好友/朋友圈 | player页面 | API | 分享卡片生成 |
| 加载优化 | 骨架屏、缓存优化 | 全局 | - | 首屏加载速度 |

### P2 - 丰富功能（第二阶段）

| 功能 | 描述 | 前端 | 后端 | 测试重点 |
|------|------|------|------|----------|
| 全局搜索 | 搜索有声书标题、历史记录 | search页面 | API | 搜索相关性 |
| 内容分类 | 按类型筛选（故事/小说/新闻/学习） | index页面 | API | 分类准确性 |
| 音质选择 | 高/标准音质切换 | player页面 | API | 音质切换生效 |
| 离线缓存 | 下载到本地离线听 | favorites页面 | API | 离线播放 |
| 断点续传 | 大文件下载断点续传 | 全局 | API | 续传完整性 |
| 数据同步 | 多端数据实时同步 | 全局 | API | 同步一致性 |

### P3 - 完善优化（第三阶段）

| 功能 | 描述 | 前端 | 后端 | 测试重点 |
|------|------|------|------|----------|
| 评论打分 | 对内容评论评分 | player页面 | API | 评论展示 |
| 消息通知 | 新内容推送、会员优惠 | 全局 | API | 推送到达率 |


---

## 页面规划

### 新增页面

```
pages/
├── search/          # 搜索页面
│   └── index.vue     - 搜索框、搜索历史、热门推荐、搜索结果列表
├── favorites/       # 收藏页面
│   └── index.vue    - 收藏列表、离线缓存管理
└── settings/        # 设置页面
    └── index.vue    - 通知设置、清理缓存、关于我们
```

### 修改页面

```
pages/
├── index/           # 首页
│   └── index.vue     - 增加分类标签、推荐内容
├── player/          # 播放器
│   └── index.vue     - 增加定时关闭、音质选择、分享、收藏按钮
├── history/         # 历史记录
│   └── index.vue     - 增加搜索入口、收藏入口、分类筛选
└── mine/            # 个人中心
    └── index.vue     - 增加设置入口、收藏入口
```

---

## API设计

### 播放记录

```
GET    /api/player/progress      - 获取播放进度
POST   /api/player/progress      - 保存播放进度
DELETE /api/player/progress/:id  - 删除播放记录
```

### 收藏

```
GET    /api/favorites            - 获取收藏列表
POST   /api/favorites            - 添加收藏
DELETE /api/favorites/:id        - 取消收藏
```

### 搜索

```
GET    /api/search?q=关键词      - 搜索音频
GET    /api/categories            - 获取分类列表
GET    /api/categories/:id       - 获取分类下的音频
```

### 离线缓存

```
GET    /api/downloads            - 获取下载列表
POST   /api/downloads/check       - 检查下载状态
```

### 评论

```
GET    /api/comments/:audioId    - 获取评论列表
POST   /api/comments             - 发表评论
```

### 用户偏好

```
GET    /api/user/preferences     - 获取用户偏好
PUT    /api/user/preferences     - 更新用户偏好
```

---

## 数据库变更

### 新增表

**play_records** - 播放记录表
```prisma
model PlayRecord {
  id        String   @id @default(uuid())
  userId    String
  audioId   String
  progress  Float    // 播放进度（秒）
  duration  Float    // 总时长
  updatedAt DateTime @updatedAt
  createdAt DateTime @default(now())
  
  @@index([userId])
}
```

**favorites** - 收藏表
```prisma
model Favorite {
  id        String   @id @default(uuid())
  userId    String
  audioId   String
  createdAt DateTime @default(now())
  
  @@unique([userId, audioId])
  @@index([userId])
}
```

**categories** - 分类表
```prisma
model Category {
  id        String   @id @default(uuid())
  name      String
  icon      String
  sort      Int
  createdAt DateTime @default(now())
}
```

**comments** - 评论表
```prisma
model Comment {
  id        String   @id @default(uuid())
  userId    String
  audioId   String
  content   String
  rating    Int      // 1-5星
  createdAt DateTime @default(now())
  
  @@index([audioId])
}
```

**user_preferences** - 用户偏好表
```prisma
model UserPreference {
  id        String   @id @default(uuid())
  userId    String   @unique
  playSpeed Float    @default(1.0)
  quality   String   @default("standard") // standard, high
  theme     String   @default("light")
  updatedAt DateTime @updatedAt
}
```

### 修改表

**audios** - 增加分类字段
```prisma
model Audio {
  // ... 现有字段
  categoryId String?
  category    Category? @relation(fields: [categoryId], references: [id])
}
```

---

## 技术方案

### 1. 播放记录与续播

**前端**:
- 使用Pinia管理播放状态
- 播放进度每5秒自动保存
- 退出页面时保存最新进度

**后端**:
- 记录播放进度到play_records表
- 续播时返回保存的progress值

### 2. 收藏功能

**前端**:
- 播放器页面添加收藏按钮
- favorites页面管理收藏列表

**后端**:
- favorites表存储收藏关系
- 支持批量操作

### 3. 定时关闭

**前端**:
- 使用setTimeout实现倒计时
- 倒计时结束自动暂停播放
- 页面关闭时保存剩余时间

### 4. 分享功能

**前端**:
- 使用微信JSSDK分享接口
- 生成分享卡片（标题+封面+简介）

**后端**:
- 生成带参数的分享链接
- 记录分享来源

### 5. 离线缓存

**前端**:
- 使用uni.downloadFile下载音频
- 存储到本地文件系统
- 管理离线列表

**后端**:
- 支持CDN域名切换
- 提供音频文件大小信息

### 6. 加载优化

**前端**:
- 骨架屏组件
- 图片懒加载
- 列表虚拟滚动

**缓存策略**:
- 接口数据缓存（localStorage）
- 音频封面缓存
- 离线音频管理

---

## 开发顺序

### 第一阶段（2周）

1. **播放记录 + 续播** (3天)
   - 数据库表设计
   - API开发
   - 前端播放器集成

2. **收藏功能** (2天)
   - 数据库表设计
   - API开发
   - favorites页面开发

3. **定时关闭** (1天)
   - 前端定时器实现

4. **播放速度记忆** (1天)
   - 用户偏好API
   - 速度记忆实现

5. **分享功能** (2天)
   - 微信JSSDK集成
   - 分享卡片生成

6. **加载优化** (2天)
   - 骨架屏组件
   - 缓存优化

### 第二阶段（2周）

7. **全局搜索** (3天)
   - 搜索API
   - search页面开发

8. **内容分类** (2天)
   - 分类管理
   - 分类筛选

9. **音质选择** (1天)
   - 音质切换逻辑
   - CDN配置

10. **离线缓存** (3天)
    - 下载管理
    - 离线播放

### 第三阶段（1周）

11. **评论打分** (2天)
12. **消息通知** (2天)


---

## 测试要点

### 功能测试

- [ ] 播放记录：续播位置准确性
- [ ] 收藏：增删查操作正常
- [ ] 定时：倒计时准确性
- [ ] 分享：微信分享卡片正确
- [ ] 搜索：搜索结果相关性
- [ ] 离线：断网播放正常

### 性能测试

- [ ] 首屏加载 < 2秒
- [ ] 列表滑动流畅
- [ ] 音频播放无卡顿

### 兼容性测试

- [ ] iOS/Android微信环境
- [ ] 不同网络环境（2G/3G/4G/WiFi）
- [ ] 不同屏幕尺寸

---

## 里程碑

| 阶段 | 完成时间 | 交付内容 |
|------|----------|----------|
| 第一阶段完成 | 第2周末 | 核心体验功能上线 |
| 第二阶段完成 | 第4周末 | 丰富功能上线 |
| 第三阶段完成 | 第5周末 | 全部功能上线 |
| 测试验收 | 第6周 | 优化调优、发布 |
