zhibo/观看历史功能-zhibo-h后台说明.md

278 lines
7.0 KiB
Markdown
Raw Normal View History

# 观看历史功能 - zhibo-h后台实现说明
## 📌 重要说明
**zhibo-h后台项目已经实现了完整的观看历史功能**
不需要在 `live-streaming` 项目中实现,所有功能都在 `Zhibo/zhibo-h` 项目中。
---
## ✅ 已实现的功能
### 后台实现zhibo-h项目
#### 1. UserActivityRecordController
**位置**: `Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/UserActivityRecordController.java`
**API路由**: `/api/front/activity`
**功能列表**:
| 功能 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 记录观看历史 | POST | `/activity/view/record` | 记录用户观看直播间/作品 |
| 获取观看历史 | GET | `/activity/view/history` | 分页获取观看历史列表 |
| 删除单条历史 | DELETE | `/activity/view/history/{historyId}` | 删除指定的观看历史 |
| 清空观看历史 | DELETE | `/activity/view/history` | 清空用户的观看历史 |
| 获取点赞记录 | GET | `/activity/like/records` | 获取点赞记录列表 |
| 获取关注记录 | GET | `/activity/follow/records` | 获取关注记录列表 |
| 获取收藏记录 | GET | `/activity/collect/works` | 获取收藏的作品列表 |
| Token调试 | GET | `/activity/debug/token` | 调试Token状态 |
#### 2. WatchHistoryController备用
**位置**: `Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/WatchHistoryController.java`
**API路由**: `/api/front/watch`
---
## 🔧 Android端需要调整的地方
### 当前问题
Android端的 `RoomDetailActivity.java` 中调用的API路径是
```java
POST /api/front/activity/record-view
```
但是zhibo-h后台的实际路径是
```java
POST /api/front/activity/view/record
```
### 解决方案
#### 方案1修改Android端API调用推荐
修改 `android-app/app/src/main/java/com/example/livestreaming/net/ApiService.java`
```java
// 当前(错误)
@POST("api/front/activity/record-view")
Call<ApiResponse<Map<String, Object>>> recordViewHistoryNew(@Body Map<String, Object> body);
// 修改为(正确)
@POST("api/front/activity/view/record")
Call<ApiResponse<Map<String, Object>>> recordViewHistoryNew(@Body Map<String, Object> body);
```
同时修改获取观看历史的API
```java
// 当前(错误)
@GET("api/front/activity/view-history")
Call<ApiResponse<PageResponse<Map<String, Object>>>> getViewHistory(
@Query("type") String type,
@Query("page") int page,
@Query("pageSize") int pageSize);
// 修改为(正确)
@GET("api/front/activity/view/history")
Call<ApiResponse<PageResponse<Map<String, Object>>>> getViewHistory(
@Query("targetType") String targetType, // 参数名改为targetType
@Query("page") int page,
@Query("pageSize") int pageSize);
```
#### 方案2在后台添加兼容路由不推荐
`UserActivityRecordController` 中添加兼容的路由映射,但这会增加维护成本。
---
## 📊 API接口详细说明
### 1. 记录观看历史
**请求**:
```http
POST /api/front/activity/view/record
Content-Type: application/json
Authorization: Bearer {token}
{
"targetType": "room", // 类型room-直播间, work-作品, profile-用户主页
"targetId": "room-123", // 目标ID
"targetTitle": "精彩直播间", // 标题
"duration": 120 // 观看时长(秒)
}
```
**响应**:
```json
{
"code": 200,
"message": "success",
"data": {
"success": true,
"message": "记录成功"
}
}
```
### 2. 获取观看历史
**请求**:
```http
GET /api/front/activity/view/history?targetType=room&page=1&pageSize=20
Authorization: Bearer {token}
```
**响应**:
```json
{
"code": 200,
"message": "success",
"data": {
"list": [
{
"id": 1,
"userId": 43,
"targetType": "room",
"targetId": "8",
"targetTitle": "火影忍者",
"createTime": "2026-01-05 10:00:00",
"updateTime": "2026-01-05 10:30:00"
}
],
"total": 10,
"pageNum": 1,
"pageSize": 20
}
}
```
### 3. 清空观看历史
**请求**:
```http
DELETE /api/front/activity/view/history?targetType=room
Authorization: Bearer {token}
```
**响应**:
```json
{
"code": 200,
"message": "清空成功",
"data": null
}
```
---
## 🗄️ 数据库表结构
观看历史数据存储在数据库表中不是JSON文件
**表名**: `eb_user_activity_record``eb_watch_history`
**字段**:
- `id` - 主键
- `user_id` - 用户ID
- `target_type` - 目标类型room/work/profile
- `target_id` - 目标ID
- `target_title` - 目标标题
- `duration` - 观看时长
- `create_time` - 创建时间
- `update_time` - 更新时间
---
## ✅ 优势
使用zhibo-h后台的优势
1. **统一管理**: 所有用户数据都在同一个数据库中
2. **完整功能**: 不仅有观看历史,还有点赞、关注、收藏等记录
3. **数据持久化**: 使用MySQL数据库不是JSON文件
4. **已经实现**: 代码已经写好只需要调整Android端的API路径
5. **日志完善**: 有详细的日志记录,方便调试
---
## 🚀 快速修复步骤
### 步骤1修改Android端ApiService.java
找到文件:`android-app/app/src/main/java/com/example/livestreaming/net/ApiService.java`
修改以下接口:
```java
// 记录观看历史(新版)
@POST("api/front/activity/view/record") // 修改路径
Call<ApiResponse<Map<String, Object>>> recordViewHistoryNew(@Body Map<String, Object> body);
// 获取观看历史
@GET("api/front/activity/view/history") // 修改路径
Call<ApiResponse<PageResponse<Map<String, Object>>>> getViewHistory(
@Query("targetType") String targetType, // 修改参数名
@Query("page") int page,
@Query("pageSize") int pageSize);
// 清除观看历史
@DELETE("api/front/activity/view/history") // 修改路径
Call<ApiResponse<String>> clearViewHistory(@Query("targetType") String targetType);
```
### 步骤2修改RoomDetailActivity.java
找到 `recordWatchHistory()` 方法,确保参数名正确:
```java
body.put("targetType", "room"); // 确保是targetType不是type
body.put("targetId", roomId);
body.put("targetTitle", "直播间");
body.put("duration", 0); // 确保是duration不是viewDuration
```
### 步骤3测试
1. 重新编译Android应用
2. 登录应用
3. 进入直播间
4. 查看日志确认API调用成功
5. 进入"我的记录" -> "观看历史"查看
---
## 📝 注意事项
1. ⚠️ **不要修改live-streaming项目**所有功能都在zhibo-h中
2. ⚠️ **确保后台服务运行**zhibo-h后台需要在8081端口运行
3. ⚠️ **Token认证**确保Android端正确传递Token
4. ⚠️ **参数名称**:注意参数名是 `targetType``duration`,不是 `type``viewDuration`
---
## 🔍 调试方法
如果遇到问题,可以使用调试接口:
```http
GET /api/front/activity/debug/token
Authorization: Bearer {token}
```
这个接口会返回:
- Token状态
- 用户ID
- 是否登录
---
**最后更新**: 2026-01-05
**状态**: ✅ 后台已实现需要调整Android端API路径