20 KiB
20 KiB
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. 业务流程
-
用户资料流程:
- 用户注册时,auth服务创建基本认证信息
- auth服务通过Feign调用user服务创建用户资料
- 用户可随时更新个人资料信息
-
用户关系流程:
- 用户关注他人,增加自己的关注数和对方的粉丝数
- 系统为被关注用户创建通知
- 用户可查看关注列表和粉丝列表
-
私信流程:
- 用户发送私信给其他用户
- 接收用户收到未读消息通知
- 用户可查看会话列表和详细私信记录
-
通知流程:
- 系统根据用户互动(点赞、评论、关注)创建通知
- 用户可查看不同类型的通知
- 用户可标记通知为已读
三、接口文档
1. 用户资料接口
1.1 初始化用户资料
- URI:
/user/profile/init - 方法: POST
- 描述: 服务内部接口,初始化用户资料(由auth服务在用户注册时调用)
- 请求参数:
userId: 用户IDusername: 用户名
- 响应:
{ "code": 200, "message": "操作成功", "data": null } - 错误码:
400: 参数错误500: 服务器内部错误
1.2 获取当前用户资料
- URI:
/user/profile/current - 方法: GET
- 描述: 获取当前登录用户的资料
- 请求头:
Authorization: Bearer {accessToken}
- 响应:
{ "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:
{ "nickname": "新昵称", "gender": 1, "birthday": "1990-01-01", "signature": "新的个性签名", "region": "新的地区" } - 响应:
{ "code": 200, "message": "操作成功", "data": null }
1.5 上传头像
- URI:
/user/profile/avatar - 方法: POST
- 描述: 上传用户头像
- 请求头:
Authorization: Bearer {accessToken}Content-Type: multipart/form-data
- 请求参数:
file: 图片文件
- 响应:
{ "code": 200, "message": "操作成功", "data": "头像URL" }
1.6 搜索用户
- URI:
/user/profile/search - 方法: GET
- 描述: 按关键词搜索用户
- 请求参数:
keyword: 搜索关键词page: 页码(默认1)size: 每页数量(默认10)
- 响应:
{ "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
- 响应:
{ "code": 200, "message": "操作成功", "data": null } - 错误码:
400: 参数错误(如已关注)404: 用户不存在
2.2 取消关注
- URI:
/user/follow/{followId} - 方法: DELETE
- 描述: 取消关注指定用户
- 请求头:
Authorization: Bearer {accessToken}
- 路径参数:
followId: 要取消关注的用户ID
- 响应:
{ "code": 200, "message": "操作成功", "data": null }
2.3 获取关注列表
- URI:
/user/follow/following/{userId} - 方法: GET
- 描述: 获取指定用户的关注列表
- 路径参数:
userId: 用户ID
- 请求参数:
page: 页码(默认1)size: 每页数量(默认10)
- 响应:
{ "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
- 响应:
{ "code": 200, "message": "操作成功", "data": true // 或 false }
3. 用户私信接口
3.1 发送私信
- URI:
/user/message - 方法: POST
- 描述: 发送私信给指定用户
- 请求头:
Authorization: Bearer {accessToken}
- 请求Body:
{ "receiverId": 2, "content": "私信内容" } - 响应:
{ "code": 200, "message": "操作成功", "data": null }
3.2 获取私信会话列表
- URI:
/user/message/list - 方法: GET
- 描述: 获取当前用户的私信会话列表
- 请求头:
Authorization: Bearer {accessToken}
- 请求参数:
page: 页码(默认1)size: 每页数量(默认10)
- 响应:
{ "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)
- 响应:
{ "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
- 响应:
{ "code": 200, "message": "操作成功", "data": null }
3.5 获取未读私信数量
- URI:
/user/message/unread/count - 方法: GET
- 描述: 获取当前用户的未读私信数量
- 请求头:
Authorization: Bearer {accessToken}
- 响应:
{ "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)
- 响应:
{ "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}
- 响应:
{ "code": 200, "message": "操作成功", "data": null }
4.3 标记指定通知为已读
- URI:
/user/notification/read/{notificationId} - 方法: PUT
- 描述: 标记指定通知为已读
- 请求头:
Authorization: Bearer {accessToken}
- 路径参数:
notificationId: 通知ID
- 响应:
{ "code": 200, "message": "操作成功", "data": null }
4.4 获取未读通知数量
- URI:
/user/notification/unread/count - 方法: GET
- 描述: 获取当前用户的未读通知数量
- 请求头:
Authorization: Bearer {accessToken}
- 响应:
{ "code": 200, "message": "操作成功", "data": 10 }
5. 用户设置接口
5.1 获取用户设置
- URI:
/user/setting - 方法: GET
- 描述: 获取当前用户的设置
- 请求头:
Authorization: Bearer {accessToken}
- 响应:
{ "code": 200, "message": "操作成功", "data": { "privacyLevel": 1, "commentNotify": 1, "likeNotify": 1, "followNotify": 1, "systemNotify": 1 } }
5.2 更新用户设置
- URI:
/user/setting - 方法: PUT
- 描述: 更新当前用户的设置
- 请求头:
Authorization: Bearer {accessToken}
- 请求Body:
{ "privacyLevel": 2, "commentNotify": 1, "likeNotify": 0, "followNotify": 1, "systemNotify": 1 } - 响应:
{ "code": 200, "message": "操作成功", "data": null }
四、数据库表结构
1. user_info (用户信息表)
id: bigint - 用户ID (主键)nickname: varchar(64) - 昵称avatar: varchar(256) - 头像URLgender: 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 - 主键IDuser_id: bigint - 用户IDfollow_id: bigint - 关注用户IDcreate_time: datetime - 创建时间
3. user_stat_daily (用户每日统计表)
id: bigint - 主键IDuser_id: bigint - 用户IDstat_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 - 主键IDsender_id: bigint - 发送者IDreceiver_id: bigint - 接收者IDcontent: text - 消息内容is_read: tinyint - 是否已读(0:未读,1:已读)create_time: datetime - 创建时间
5. user_notification (用户通知表)
id: bigint - 主键IDuser_id: bigint - 用户IDtype: tinyint - 通知类型(1:点赞,2:评论,3:关注,4:系统通知)content: text - 通知内容related_id: bigint - 相关IDis_read: tinyint - 是否已读(0:未读,1:已读)create_time: datetime - 创建时间
6. user_setting (用户设置表)
id: bigint - 主键IDuser_id: bigint - 用户IDprivacy_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. 获取用户资料
# 使用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. 关注用户
# 使用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模块是整个视频平台的核心组成部分,它提供了完整的用户信息管理、社交互动和消息通知功能,为用户提供良好的社交体验。