# 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模块是整个视频平台的核心组成部分,它提供了完整的用户信息管理、社交互动和消息通知功能,为用户提供良好的社交体验。