Files
HAOVP/docs/video-user模块目录架构、功能及接口文档.md
T

751 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# video-user模块目录架构、功能及接口文档
## 一、目录架构
```
video-user/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/nuaa/video/user/
│ │ │ ├── config/ # 配置类
│ │ │ │ ├── FeignConfig.java # Feign配置类
│ │ │ │ ├── MinioConfig.java # Minio配置类
│ │ │ │ └── SecurityConfig.java # 安全配置类
│ │ │ ├── controller/ # 控制器
│ │ │ │ ├── UserProfileController.java # 用户资料控制器
│ │ │ │ ├── UserFollowController.java # 用户关注控制器
│ │ │ │ ├── UserMessageController.java # 用户私信控制器
│ │ │ │ ├── UserNotificationController.java # 用户通知控制器
│ │ │ │ └── UserSettingController.java # 用户设置控制器
│ │ │ ├── dto/ # 数据传输对象
│ │ │ │ ├── UserProfileDTO.java # 用户资料DTO
│ │ │ │ ├── UserMessageDTO.java # 用户私信DTO
│ │ │ │ └── UserSettingDTO.java # 用户设置DTO
│ │ │ ├── entity/ # 实体类
│ │ │ │ ├── UserInfo.java # 用户信息实体
│ │ │ │ ├── UserFollow.java # 用户关注实体
│ │ │ │ ├── UserStatDaily.java # 用户每日统计实体
│ │ │ │ ├── UserMessage.java # 用户私信实体
│ │ │ │ ├── UserNotification.java # 用户通知实体
│ │ │ │ └── UserSetting.java # 用户设置实体
│ │ │ ├── feign/ # Feign客户端
│ │ │ │ └── AuthFeignClient.java # 认证服务Feign客户端
│ │ │ ├── filter/ # 过滤器
│ │ │ │ └── JwtAuthenticationFilter.java # JWT认证过滤器
│ │ │ ├── mapper/ # MyBatis映射接口
│ │ │ │ ├── UserInfoMapper.java # 用户信息Mapper
│ │ │ │ ├── UserFollowMapper.java # 用户关注Mapper
│ │ │ │ ├── UserStatDailyMapper.java # 用户每日统计Mapper
│ │ │ │ ├── UserMessageMapper.java # 用户私信Mapper
│ │ │ │ ├── UserNotificationMapper.java # 用户通知Mapper
│ │ │ │ └── UserSettingMapper.java # 用户设置Mapper
│ │ │ ├── service/ # 服务层
│ │ │ │ ├── UserInfoService.java # 用户信息服务接口
│ │ │ │ ├── UserFollowService.java # 用户关注服务接口
│ │ │ │ ├── UserMessageService.java # 用户私信服务接口
│ │ │ │ ├── UserNotificationService.java # 用户通知服务接口
│ │ │ │ ├── UserSettingService.java # 用户设置服务接口
│ │ │ │ └── impl/ # 实现类
│ │ │ │ ├── UserInfoServiceImpl.java
│ │ │ │ ├── UserFollowServiceImpl.java
│ │ │ │ ├── UserMessageServiceImpl.java
│ │ │ │ ├── UserNotificationServiceImpl.java
│ │ │ │ └── UserSettingServiceImpl.java
│ │ │ ├── vo/ # 视图对象
│ │ │ │ ├── UserProfileVO.java # 用户资料VO
│ │ │ │ ├── UserMessageVO.java # 用户私信VO
│ │ │ │ └── UserNotificationVO.java # 用户通知VO
│ │ │ └── UserApplication.java # 启动类
│ │ └── resources/
│ │ ├── mapper/ # MyBatis XML映射文件
│ │ │ ├── UserInfoMapper.xml
│ │ │ ├── UserFollowMapper.xml
│ │ │ ├── UserMessageMapper.xml
│ │ │ └── UserNotificationMapper.xml
│ │ ├── application.yml # 主配置文件
│ │ └── application-dev.yml # 开发环境配置
└── pom.xml
```
## 二、功能概述
### 1. 核心功能
- **用户资料管理**:创建、查询、更新用户资料,上传头像
- **用户关系管理**:关注/取消关注用户,查看关注列表和粉丝列表
- **私信系统**:发送和接收私信,管理会话和消息状态
- **通知系统**:管理用户收到的系统通知和用户互动通知
- **用户设置**:管理用户隐私和通知偏好设置
- **用户数据统计**:收集和查询用户活动统计信息
### 2. 业务流程
1. **用户资料流程**:
- 用户注册时,auth服务创建基本认证信息
- auth服务通过Feign调用user服务创建用户资料
- 用户可随时更新个人资料信息
2. **用户关系流程**:
- 用户关注他人,增加自己的关注数和对方的粉丝数
- 系统为被关注用户创建通知
- 用户可查看关注列表和粉丝列表
3. **私信流程**:
- 用户发送私信给其他用户
- 接收用户收到未读消息通知
- 用户可查看会话列表和详细私信记录
4. **通知流程**:
- 系统根据用户互动(点赞、评论、关注)创建通知
- 用户可查看不同类型的通知
- 用户可标记通知为已读
## 三、接口文档
### 1. 用户资料接口
#### 1.1 初始化用户资料
- **URI**: `/user/profile/init`
- **方法**: POST
- **描述**: 服务内部接口,初始化用户资料(由auth服务在用户注册时调用)
- **请求参数**:
- `userId`: 用户ID
- `username`: 用户名
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
- **错误码**:
- `400`: 参数错误
- `500`: 服务器内部错误
#### 1.2 获取当前用户资料
- **URI**: `/user/profile/current`
- **方法**: GET
- **描述**: 获取当前登录用户的资料
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": {
"id": 1,
"nickname": "用户昵称",
"avatar": "头像URL",
"gender": 1,
"birthday": "1990-01-01",
"signature": "个性签名",
"region": "地区",
"followerCount": 10,
"followingCount": 20,
"videoCount": 5,
"likeCount": 100,
"level": 3,
"vipLevel": 0,
"vipExpireTime": null,
"isFollowed": false,
"createTime": "2023-01-01T12:00:00"
}
}
```
#### 1.3 获取指定用户资料
- **URI**: `/user/profile/public/{userId}`
- **方法**: GET
- **描述**: 获取指定用户的资料
- **路径参数**:
- `userId`: 用户ID
- **响应**: 与获取当前用户资料相同
#### 1.4 更新用户资料
- **URI**: `/user/profile`
- **方法**: PUT
- **描述**: 更新当前用户资料
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **请求Body**:
```json
{
"nickname": "新昵称",
"gender": 1,
"birthday": "1990-01-01",
"signature": "新的个性签名",
"region": "新的地区"
}
```
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
#### 1.5 上传头像
- **URI**: `/user/profile/avatar`
- **方法**: POST
- **描述**: 上传用户头像
- **请求头**:
- `Authorization`: Bearer {accessToken}
- `Content-Type`: multipart/form-data
- **请求参数**:
- `file`: 图片文件
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": "头像URL"
}
```
#### 1.6 搜索用户
- **URI**: `/user/profile/search`
- **方法**: GET
- **描述**: 按关键词搜索用户
- **请求参数**:
- `keyword`: 搜索关键词
- `page`: 页码(默认1)
- `size`: 每页数量(默认10)
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": {
"records": [
{
"id": 1,
"nickname": "用户昵称",
"avatar": "头像URL",
"signature": "个性签名",
"followerCount": 10,
"followingCount": 20
}
],
"total": 100,
"size": 10,
"current": 1,
"pages": 10
}
}
```
### 2. 用户关注接口
#### 2.1 关注用户
- **URI**: `/user/follow/{followId}`
- **方法**: POST
- **描述**: 关注指定用户
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **路径参数**:
- `followId`: 要关注的用户ID
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
- **错误码**:
- `400`: 参数错误(如已关注)
- `404`: 用户不存在
#### 2.2 取消关注
- **URI**: `/user/follow/{followId}`
- **方法**: DELETE
- **描述**: 取消关注指定用户
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **路径参数**:
- `followId`: 要取消关注的用户ID
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
#### 2.3 获取关注列表
- **URI**: `/user/follow/following/{userId}`
- **方法**: GET
- **描述**: 获取指定用户的关注列表
- **路径参数**:
- `userId`: 用户ID
- **请求参数**:
- `page`: 页码(默认1)
- `size`: 每页数量(默认10)
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": {
"records": [
{
"id": 2,
"nickname": "被关注用户",
"avatar": "头像URL",
"signature": "个性签名",
"followerCount": 100,
"followingCount": 50,
"isFollowed": true
}
],
"total": 20,
"size": 10,
"current": 1,
"pages": 2
}
}
```
#### 2.4 获取粉丝列表
- **URI**: `/user/follow/followers/{userId}`
- **方法**: GET
- **描述**: 获取指定用户的粉丝列表
- **路径参数**:
- `userId`: 用户ID
- **请求参数**:
- `page`: 页码(默认1)
- `size`: 每页数量(默认10)
- **响应**: 与关注列表格式相同
#### 2.5 检查是否已关注
- **URI**: `/user/follow/check/{followId}`
- **方法**: GET
- **描述**: 检查当前用户是否已关注指定用户
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **路径参数**:
- `followId`: 被检查的用户ID
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": true // 或 false
}
```
### 3. 用户私信接口
#### 3.1 发送私信
- **URI**: `/user/message`
- **方法**: POST
- **描述**: 发送私信给指定用户
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **请求Body**:
```json
{
"receiverId": 2,
"content": "私信内容"
}
```
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
#### 3.2 获取私信会话列表
- **URI**: `/user/message/list`
- **方法**: GET
- **描述**: 获取当前用户的私信会话列表
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **请求参数**:
- `page`: 页码(默认1)
- `size`: 每页数量(默认10)
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": {
"records": [
{
"id": 100,
"senderId": 2,
"senderNickname": "发送者昵称",
"senderAvatar": "发送者头像URL",
"receiverId": 1,
"receiverNickname": "接收者昵称",
"receiverAvatar": "接收者头像URL",
"content": "最新消息内容",
"isRead": 0,
"createTime": "2023-05-20T14:30:00"
}
],
"total": 5,
"size": 10,
"current": 1,
"pages": 1
}
}
```
#### 3.3 获取私信详情
- **URI**: `/user/message/detail/{targetId}`
- **方法**: GET
- **描述**: 获取与指定用户的私信记录
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **路径参数**:
- `targetId`: 目标用户ID
- **请求参数**:
- `page`: 页码(默认1)
- `size`: 每页数量(默认20)
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": {
"records": [
{
"id": 100,
"senderId": 1,
"senderNickname": "当前用户",
"senderAvatar": "头像URL",
"receiverId": 2,
"receiverNickname": "目标用户",
"receiverAvatar": "头像URL",
"content": "你好",
"isRead": 1,
"createTime": "2023-05-20T14:28:00"
},
{
"id": 101,
"senderId": 2,
"senderNickname": "目标用户",
"senderAvatar": "头像URL",
"receiverId": 1,
"receiverNickname": "当前用户",
"receiverAvatar": "头像URL",
"content": "你好,很高兴认识你",
"isRead": 1,
"createTime": "2023-05-20T14:30:00"
}
],
"total": 2,
"size": 20,
"current": 1,
"pages": 1
}
}
```
#### 3.4 标记私信为已读
- **URI**: `/user/message/read/{senderId}`
- **方法**: PUT
- **描述**: 标记来自指定发送者的所有私信为已读
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **路径参数**:
- `senderId`: 发送者用户ID
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
#### 3.5 获取未读私信数量
- **URI**: `/user/message/unread/count`
- **方法**: GET
- **描述**: 获取当前用户的未读私信数量
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": 5
}
```
### 4. 用户通知接口
#### 4.1 获取通知列表
- **URI**: `/user/notification/list`
- **方法**: GET
- **描述**: 获取用户通知列表
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **请求参数**:
- `type`: 通知类型(1:点赞,2:评论,3:关注,4:系统通知,可选)
- `page`: 页码(默认1)
- `size`: 每页数量(默认10)
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": {
"records": [
{
"id": 1,
"type": 3,
"content": "用户小明关注了你",
"relatedId": 123,
"isRead": 0,
"createTime": "2023-05-20T10:00:00"
}
],
"total": 50,
"size": 10,
"current": 1,
"pages": 5
}
}
```
#### 4.2 标记所有通知为已读
- **URI**: `/user/notification/read`
- **方法**: PUT
- **描述**: 标记当前用户的所有通知为已读
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
#### 4.3 标记指定通知为已读
- **URI**: `/user/notification/read/{notificationId}`
- **方法**: PUT
- **描述**: 标记指定通知为已读
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **路径参数**:
- `notificationId`: 通知ID
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
#### 4.4 获取未读通知数量
- **URI**: `/user/notification/unread/count`
- **方法**: GET
- **描述**: 获取当前用户的未读通知数量
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": 10
}
```
### 5. 用户设置接口
#### 5.1 获取用户设置
- **URI**: `/user/setting`
- **方法**: GET
- **描述**: 获取当前用户的设置
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": {
"privacyLevel": 1,
"commentNotify": 1,
"likeNotify": 1,
"followNotify": 1,
"systemNotify": 1
}
}
```
#### 5.2 更新用户设置
- **URI**: `/user/setting`
- **方法**: PUT
- **描述**: 更新当前用户的设置
- **请求头**:
- `Authorization`: Bearer {accessToken}
- **请求Body**:
```json
{
"privacyLevel": 2,
"commentNotify": 1,
"likeNotify": 0,
"followNotify": 1,
"systemNotify": 1
}
```
- **响应**:
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
## 四、数据库表结构
### 1. user_info (用户信息表)
- `id`: bigint - 用户ID (主键)
- `nickname`: varchar(64) - 昵称
- `avatar`: varchar(256) - 头像URL
- `gender`: tinyint - 性别(0:未知,1:男,2:女)
- `birthday`: date - 生日
- `signature`: varchar(256) - 个性签名
- `region`: varchar(128) - 地区
- `follower_count`: int - 粉丝数
- `following_count`: int - 关注数
- `video_count`: int - 视频数
- `like_count`: int - 获赞数
- `coin_count`: int - 硬币数
- `favorite_count`: int - 收藏数
- `view_count`: bigint - 播放数
- `level`: tinyint - 等级
- `vip_level`: tinyint - VIP等级
- `vip_expire_time`: datetime - VIP到期时间
- `created_by`: varchar(64) - 创建人
- `updated_by`: varchar(64) - 更新人
- `create_time`: datetime - 创建时间
- `update_time`: datetime - 更新时间
### 2. user_follow (用户关注表)
- `id`: bigint - 主键ID
- `user_id`: bigint - 用户ID
- `follow_id`: bigint - 关注用户ID
- `create_time`: datetime - 创建时间
### 3. user_stat_daily (用户每日统计表)
- `id`: bigint - 主键ID
- `user_id`: bigint - 用户ID
- `stat_date`: date - 统计日期
- `follower_increment`: int - 新增粉丝数
- `following_increment`: int - 新增关注数
- `video_increment`: int - 新增视频数
- `like_increment`: int - 新增获赞数
- `coin_increment`: int - 新增硬币数
- `favorite_increment`: int - 新增收藏数
- `view_increment`: bigint - 新增播放数
- `create_time`: datetime - 创建时间
### 4. user_message (用户私信表)
- `id`: bigint - 主键ID
- `sender_id`: bigint - 发送者ID
- `receiver_id`: bigint - 接收者ID
- `content`: text - 消息内容
- `is_read`: tinyint - 是否已读(0:未读,1:已读)
- `create_time`: datetime - 创建时间
### 5. user_notification (用户通知表)
- `id`: bigint - 主键ID
- `user_id`: bigint - 用户ID
- `type`: tinyint - 通知类型(1:点赞,2:评论,3:关注,4:系统通知)
- `content`: text - 通知内容
- `related_id`: bigint - 相关ID
- `is_read`: tinyint - 是否已读(0:未读,1:已读)
- `create_time`: datetime - 创建时间
### 6. user_setting (用户设置表)
- `id`: bigint - 主键ID
- `user_id`: bigint - 用户ID
- `privacy_level`: tinyint - 隐私等级(1:公开,2:仅关注,3:私密)
- `comment_notify`: tinyint - 评论通知(0:关闭,1:开启)
- `like_notify`: tinyint - 点赞通知(0:关闭,1:开启)
- `follow_notify`: tinyint - 关注通知(0:关闭,1:开启)
- `system_notify`: tinyint - 系统通知(0:关闭,1:开启)
- `created_by`: varchar(64) - 创建人
- `updated_by`: varchar(64) - 更新人
- `create_time`: datetime - 创建时间
- `update_time`: datetime - 更新时间
## 五、调用示例
### 1. 获取用户资料
```bash
# 使用cURL
curl -X GET http://localhost:9002/user/profile/current \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..."
# 使用JavaScript
fetch('http://localhost:9002/user/profile/current', {
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9...'
}
})
.then(response => response.json())
.then(data => console.log(data));
```
### 2. 关注用户
```bash
# 使用cURL
curl -X POST http://localhost:9002/user/follow/2 \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..."
# 使用JavaScript
fetch('http://localhost:9002/user/follow/2', {
method: 'POST',
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9...'
}
})
.then(response => response.json())
.then(data => console.log(data));
```
video-user模块是整个视频平台的核心组成部分,它提供了完整的用户信息管理、社交互动和消息通知功能,为用户提供良好的社交体验。