# 观看历史功能实现说明 ## 功能概述 已成功实现观看历史记录功能,用户在观看直播时会自动记录观看历史,并可以在"我的记录"页面查看。 ## 实现的功能 ### 1. 后台功能 #### 新增文件 - `live-streaming/server/store/viewHistoryStore.js` - 观看历史数据存储 - `live-streaming/server/routes/viewHistory.js` - 观看历史API路由 #### 修改文件 - `live-streaming/server/index.js` - 添加观看历史路由 #### API接口 1. **记录观看历史** - 接口:`POST /api/front/activity/record-view` - 功能:记录用户观看直播间、作品等内容 - 参数: ```json { "targetType": "room", // 类型:room/work/profile "targetId": "room-id", // 目标ID "targetTitle": "直播间标题", "coverImage": "封面图片URL", "streamerName": "主播名称", "viewDuration": 120 // 观看时长(秒) } ``` 2. **获取观看历史** - 接口:`GET /api/front/activity/view-history` - 功能:分页获取用户的观看历史 - 参数:`page`, `pageSize`, `type`(可选,过滤类型) 3. **清除观看历史** - 接口:`DELETE /api/front/activity/view-history` - 功能:清除用户的观看历史 - 参数:`type`(可选,清除指定类型) 4. **删除单条记录** - 接口:`DELETE /api/front/activity/view-history/:id` - 功能:删除指定的观看历史记录 ### 2. Android端功能 #### 修改文件 - `android-app/app/src/main/java/com/example/livestreaming/RoomDetailActivity.java` #### 实现功能 1. **自动记录观看历史** - 用户进入直播间时自动记录 - 房间信息加载后更新详细信息 - 未登录用户不记录 2. **显示观看历史** - 在"我的记录"页面的"观看历史"标签页显示 - 支持点击跳转到对应的直播间 - 显示直播间封面、标题、主播名称、观看时间等信息 ## 数据存储 观看历史数据保存在:`live-streaming/data/viewHistory.json` 数据格式: ```json [ { "id": 1704441600000, "userId": 1, "targetType": "room", "targetId": "room-123", "targetTitle": "精彩直播间", "coverImage": "https://example.com/cover.jpg", "streamerName": "主播名称", "viewDuration": 120, "createTime": "2024-01-05T10:00:00.000Z", "updateTime": "2024-01-05T10:02:00.000Z", "viewCount": 3 } ] ``` ## 特性说明 1. **自动去重**:同一用户观看同一内容会更新记录而不是创建新记录 2. **观看次数统计**:记录用户观看同一内容的次数 3. **时间排序**:按最后观看时间倒序排列 4. **分页支持**:支持分页加载,避免一次加载过多数据 5. **类型过滤**:支持按类型(直播间/作品/用户主页)过滤 6. **实时状态**:直播间的在线状态会实时更新 ## 使用方式 ### 用户端操作 1. 登录应用 2. 进入任意直播间观看 3. 系统自动记录观看历史 4. 进入"我的" -> "我的记录" 5. 切换到"观看历史"标签页查看 ### 开发者测试 参考 `live-streaming/test-view-history.md` 文件中的测试步骤 ## 注意事项 1. 用户必须登录才能记录观看历史 2. 观看历史仅在用户端可见,不会公开 3. 数据持久化存储在本地JSON文件中 4. 生产环境建议使用数据库存储 ## 后续优化建议 1. 添加观看时长的实时更新(目前仅记录初始值) 2. 支持用户手动删除单条观看历史 3. 添加观看历史的时间筛选功能 4. 支持导出观看历史数据 5. 添加隐私设置(是否记录观看历史) 6. 迁移到数据库存储(MySQL/PostgreSQL)