太谷县建设局网站,班级网站建设感想,网站做app要权限,怎么做网站demo文章目录一、关注我需求分析1. 关注我流程图2. 关注我流程简述3. 表结构设计二、关注我源码分析2.1. 前端2.2. 后端三、账号1关注实战3.1. 关注前数据记录3.2. 账号1关注账号23.3. 账号1关注后数据变化四、. 账号2关注实战4.1. 账号2关注账号14.2. 关注后数据变化4.3. redis存储… 文章目录一、关注我需求分析1. 关注我流程图2. 关注我流程简述3. 表结构设计二、关注我源码分析2.1. 前端2.2. 后端三、账号1关注实战3.1. 关注前数据记录3.2. 账号1关注账号23.3. 账号1关注后数据变化四、. 账号2关注实战4.1. 账号2关注账号14.2. 关注后数据变化4.3. redis存储数据结构一、关注我需求分析
1. 关注我流程图 2. 关注我流程简述
1.短视频页面点击关注2.前端携带用户ID和短视频发布者ID请求后端3.参数校验用户ID和短视频发布者ID是否为空 3.1. 为空直接返回前端提示语3.2.不为空流程继续 4.携带用户ID查询数据库5.携带短视频发布者ID查询数据库6.双ID判断 6.1. 为空直接返回前端提示语6.2.不为空流程继续 7.判断对方是否关注我7.1. 未关注我互为朋友关系状态位07.2. 已关注我互为朋友关系状态位1 7.2.1.更新博主与我的粉丝关系状态为17.2.2.保存落库 8.保存我和博主的粉丝关系9.我的关注总数110.博主的粉丝总数11.我和博主的关联关系112.返回响应
3. 表结构设计
CREATE TABLE fans (id varchar(24) NOT NULL,vloger_id varchar(24) NOT NULL COMMENT 作家用户id,fan_id varchar(24) NOT NULL COMMENT 粉丝用户id,is_fan_friend_of_mine int(1) NOT NULL COMMENT 粉丝是否是vloger的朋友如果成为朋友则本表的双方此字段都需要设置为1如果有一人取关则两边都需要设置为0,PRIMARY KEY (id) USING BTREE,UNIQUE KEY writer_id (vloger_id,fan_id) USING BTREE
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT粉丝表\n\n;二、关注我源码分析 短视频页面关注后个人中心关注状态同步修改 2.1. 前端 // 关注我followMe() {var me this;var myUserInfo getApp().getUserInfoSession();if (myUserInfo null) {uni.showToast({duration: 3000,title: 请登录~,icon: none});uni.navigateTo({url: ../loginRegist/loginRegist,animationType: slide-in-bottom,success() {me.loginWords 请登录}});return;}var vlogerId me.userPageId;var userId getApp().getUserInfoSession().id;var serverUrl app.globalData.serverUrl;uni.request({method: POST,header: {headerUserId: userId,headerUserToken: app.getUserSessionToken()},url: serverUrl /fans/follow?myId userId vlogerId vlogerId,success(result) {if (result.data.status 200) {me.isFollow true;uni.setStorageSync(justFollowVlogerId, vlogerId);// 刷新当前页的粉丝数var pendingInfo me.pageUserInfo;me.pageUserInfo.myFansCounts pendingInfo.myFansCounts 1;} else {uni.showToast({title: result.data.msg,icon: none,duration: 3000});}}});},2.2. 后端
controller /*** 关注** param myId 我的用户ID* param vlogerId 视频发布者ID* return*/PostMapping(follow)public GraceJSONResult follow(RequestParam String myId,RequestParam String vlogerId) {// 判断两个id不能为空if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);}// 判断当前用户自己不能关注自己if (myId.equalsIgnoreCase(vlogerId)) {return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);}// 判断两个id对应的用户是否存在Users vloger userService.getUser(vlogerId);Users myInfo userService.getUser(myId);// fixme: 两个用户id的数据库查询后的判断是分开好还是合并判断好if (myInfo null || vloger null) {return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);}// 保存粉丝关系到数据库fansService.doFollow(myId, vlogerId);// 博主的粉丝1我的关注1//我的关注总数redis.increment(REDIS_MY_FOLLOWS_COUNTS : myId, 1);// 博主的粉丝总数redis.increment(REDIS_MY_FANS_COUNTS : vlogerId, 1);// 我和博主的关联关系依赖redis不要存储数据库避免db的性能瓶颈redis.set(REDIS_FANS_AND_VLOGGER_RELATIONSHIP : myId : vlogerId, 1);return GraceJSONResult.ok();}/*** 关注** param myId 我的ID* param vlogerId 视频博主ID*/TransactionalOverridepublic void doFollow(String myId, String vlogerId) {String fid sid.nextShort();Fans fans new Fans();fans.setId(fid);fans.setFanId(myId);fans.setVlogerId(vlogerId);// 判断对方是否关注我如果关注我那么双方都要互为朋友关系//TODO 这里的参数注意 判断对方是否关注我如果关注我那么双方都要互为朋友关系Fans vloger queryFansRelationship(vlogerId, myId);if (vloger ! null) {fans.setIsFanFriendOfMine(YesOrNo.YES.type);// 粉丝是否是vloger的朋友如果成为朋友则本表的双方此字段都需要设置为1如果有一人取关则两边都需要设置为0vloger.setIsFanFriendOfMine(YesOrNo.YES.type);fansMapper.updateByPrimaryKeySelective(vloger);} else {//粉丝是否是vloger的朋友如果成为朋友则本表的双方此字段都需要设置为1如果有一人取关则两边都需要设置为0fans.setIsFanFriendOfMine(YesOrNo.NO.type);}fansMapper.insert(fans);// 系统消息关注msgService.createMsg(myId, vlogerId, MessageEnum.FOLLOW_YOU.type, null);}/*** 判断对方是否关注我如果关注我那么双方都要互为朋友关系** param fanId 粉丝ID* param vlogerId 短视频发布ID* return*/public Fans queryFansRelationship(String fanId, String vlogerId) {Example example new Example(Fans.class);Example.Criteria criteria example.createCriteria();criteria.andEqualTo(vlogerId, vlogerId);criteria.andEqualTo(fanId, fanId);List list fansMapper.selectByExample(example);Fans fan null;if (list ! null list.size() 0 !list.isEmpty()) {fan (Fans) list.get(0);}return fan;}三、账号1关注实战
3.1. 关注前数据记录 找二个没有关注的账号进行测试 账号尾号~5217 昵称昕泽之源 关注总量2 粉丝数1 账号尾号~0009 昵称小美女 关注总量0 粉丝数1 2个账号关系~二人暂无关注
3.2. 账号1关注账号2
使用“尾号为5217”账号登录
查看首页由尾号为0009的小美女账号发布短视频 点击关注
3.3. 账号1关注后数据变化
尾号~5217关注 尾号~0009的账户后数据变化
尾号~5217数据变化 关注总量由2变成了3 粉丝数1
尾号~0009数据变化 关注总量没变 还是 0 粉丝数由1变成了2
表数据变化 用户表 尾号~0009 userid21100598TZ9XG6RP 尾号~5217 userid220620BZ2DH0KP94 粉丝表 新增一条数据视频博主21100598TZ9XG6RP粉丝中有我220620BZ2DH0KP94
2206279H48HX0T54 21100598TZ9XG6RP 220620BZ2DH0KP94 0四、. 账号2关注实战
4.1. 账号2关注账号1
使用尾号~0009账户登录
去首页~视频列表中查看是否关注的状态为-未关注 点击关注 关注状态为-已关注
4.2. 关注后数据变化
尾号~0009关注 尾号~5217的账户后数据变化
尾号~5217数据变化 关注总量3 粉丝数由1变成了2
尾号~0009数据变化 关注总量由 变成了1 粉丝数还是2
表数据变化 用户表 尾号~0009 userid21100598TZ9XG6RP 尾号~5217 userid220620BZ2DH0KP94 粉丝表 新增一条数据 我220620BZ2DH0KP94的粉丝中有尾号000921100598TZ9XG6RP 视频博主21100598TZ9XG6RP粉丝中有我220620BZ2DH0KP94 并且我们的关系更新为朋友关系状态都为0
2206279P5FYBZYNC 220620BZ2DH0KP94 21100598TZ9XG6RP 1
2206279H48HX0T54 21100598TZ9XG6RP 220620BZ2DH0KP94 14.3. redis存储数据结构