项目持续创作中:

仿抖音短视频APP专栏

目录

实现用户点赞视频

用户取消点赞

用户是否点赞视频的判断


实现用户点赞视频

用户在点赞我们的视频后,我们需要去实现一些相关的业务,

这里需要对应到数据库的一张表,就是my_liked_vlog,这个就是我所点赞过的视频列表。

点赞过后,这个视频的点赞数会累加一,会用到我们的redis技术。

首先在我们的service中:

实现:

  @Transactional@Overridepublic void userLikeVlog(String userId, String vlogId) {String rid = sid.nextShort();MyLikedVlog likedVlog = new MyLikedVlog();likedVlog.setId(rid);likedVlog.setVlogId(vlogId);likedVlog.setUserId(userId);myLikedVlogMapper.insert(likedVlog);}

注意在我们的前面加一个注入MyLikeVlogMapper

在编写controller之前先查看一下前端:

我们在后端:

 @PostMapping("like")public GraceJSONResult myPrivateList(@RequestParam String userId,@RequestParam String vlogerId,@RequestParam String vlogId) {//我点赞的视频,关联保存到数据库vlogService.userLikeVlog(userId,vlogId);//点赞后,视频和视频发布者的或者都会+1;redis.increment(REDIS_VLOGER_BE_LIKED_COUNTS+":"+vlogerId,1);redis.increment(REDIS_VLOG_BE_LIKED_COUNTS+":"+vlogId,1);//我点赞的视频,需要在redis中保存关联关系redis.set(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId,"1");return GraceJSONResult.ok();}

这里的redis操作可以放到我们的service里面执行会更好。

也最好下来在这里做一个校验判断两个id是否存在,在我们的上一篇文章中有写到。

启动,测试:

点击之后,这里红色的心亮起了

我们打开数据库来看一下:

这里是成功的插入了

打开redis查看:

这里是一模一样的,说明是成功的

用户点赞操作就是实现了。

用户取消点赞

咱们的前端这里发起的请求叫unlike

我们后端去写一下,携带的参数和上面是相同的,操作和喜欢是相反的。

   @PostMapping("unlike")public GraceJSONResult unlike(@RequestParam String userId,@RequestParam String vlogerId,@RequestParam String vlogId) {//我取消点赞的视频,关联关系删除vlogService.userUnLikeVlog(userId,vlogId);//点赞后,视频和视频发布者的或者都会+1;redis.decrement(REDIS_VLOGER_BE_LIKED_COUNTS+":"+vlogerId,1);redis.decrement(REDIS_VLOG_BE_LIKED_COUNTS+":"+vlogId,1);redis.del(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId);return GraceJSONResult.ok();}

这里还是建议大家redis写在service中处理。

接着service:

实现:

这里会根据vlogeId和userId去匹配符合的数据进行删除。

  @Transactional@Overridepublic void userUnLikeVlog(String userId, String vlogId) {MyLikedVlog likedVlog = new MyLikedVlog();likedVlog.setVlogId(vlogId);likedVlog.setUserId(userId);myLikedVlogMapper.delete(likedVlog);}

重启,测试:

这里我们取消点赞。

打开数据库:

这里是还没有刷新的原来的数据

刷新之后这条记录就没有了。

再到redis中查看:

刷新一下:

累减变为0

这里也被删除了。

在页面中我们看下效果,先对视频进行一个点赞

获赞数变为1

取消点赞,获赞数变为0:

我们在这里会发现一些小问题,在之前的开发中:

这里其实是有点问题的

用户的获赞总数应该是视频博主(点赞/喜欢)总和

第一条记录是永远不存在的

这样就能修复这样一段代码。

用户是否点赞视频的判断

我们这里其实是存在一点问题的,因为当我们下拉刷新式,虽然我们的数据被存入了数据库中吗,但是在前端其实并没有做处理,它刷新之后这个心还是没有亮

对于的我们的后端,其实在进入这个界面时,应该判断曾经有没有点赞过这条视频,如果点赞了,再次看到这个视频时,应该是亮着的。

我们要在这里对方法进行一个扩展:

当我们拿到list之后,要进行一个循环判断,判断用户是否点赞过视频。

首先:

我们要在这里添加一个参数userId,其实在我们的前端也是可以看见的。

这里我们要在接口方法处都要去添加一个传入的参数。

在service实现中我们要将返回的list进行循环遍历,

for(IndexVlogVO v : list)调用方法在reids中查询我是否点赞过这条视频。

  @Overridepublic PagedGridResult getIndexVlogList(String userId,String search,Integer page,Integer pageSize){PageHelper.startPage(page,pageSize);Map<String,Object> map = new HashMap<>();if(StringUtils.isNotBlank(search)){map.put("search",search);}List<IndexVlogVO> list= vlogMapperCustom.getIndexVlogList(map);
//        return list;for(IndexVlogVO v : list){String vlogerId = v.getVlogerId();String vlogId = v.getVlogId();if(StringUtils.isNotBlank(userId)){v.setDoILikeThisVlog(doILikeVlog(userId,vlogId));}}return setterPagedGrid(list,page);}private boolean doILikeVlog(String myId,String vlogId){String doILike = redis.get(REDIS_USER_LIKE_VLOG+":"+myId+":"+vlogId);boolean isLike = false;if(StringUtils.isNotBlank(doILike) && doILike.equalsIgnoreCase("1")){isLike  = true;}return isLike;}

重启,测试:

我们进行一个下拉刷新

这里就完成了我们的一个判断用户是否点赞过该视频。

从零开始搭建仿抖音短视频APP--后端开发粉丝业务模块(3)相关推荐

  1. 从零开始搭建仿抖音短视频APP--后端开发粉丝业务模块(1)

    项目持续更新中: 仿抖音短视频APP专栏 目录 关注短视频博主 Redis技术妙用 取消关注博主 关注短视频博主 在我们的主页中,刷视频时是可以在头像下方进行一个关注 点击头像,进入对方的主页也是可以 ...

  2. 从零开始搭建仿抖音短视频APP-后端开发粉丝业务模块(2)

    项目持续更新中: 防抖音短视频APP项目专栏 目录 判断用户是否关注博主 我的关注列表 我的粉丝列表 实现互粉标记显示 判断用户是否关注博主 在这里我们对这个人进行关注之后,重新退出界面再次进入,并没 ...

  3. 从零开始搭建仿抖音短视频APP-后端开发消息业务模块(1)

    项目持续更新中: 仿抖音短视频APP专栏 目录 保存系统消息到MongoDB 系统消息入库保存-关注 系统消息入库保存-点赞短视频 系统消息入库保存-评论与回复 保存系统消息到MongoDB 我们把m ...

  4. 从零快速搭建仿抖音短视频APP-后端开发粉丝业务模块(4)

    项目持续更新中: 仿抖音短视频APP专栏 目录 视频页点赞总数 用户页点赞视频列表展示 我的关注视频列表展示 互粉朋友视频瀑布列表展示 视频页点赞总数 在我们的点赞下面会有一个数字,代表点赞总数.我们 ...

  5. 从零开始搭建仿抖音短视频App-前后端开发模式,前端框架的选择、前端项目搭建

    目录 前后端开发模式 传统JavaWeb开发模式 前后端分离模式​编辑 前端框架的选择-UniApp介绍 内网互通原则 运行到iphone与Android 前后端开发模式 传统JavaWeb开发模式 ...

  6. 从零开始搭建仿抖音短视频APP-后端开发短视频业务模块(2)

    项目持续更新中: 仿抖音短视频APP 目录 实现数据层mybatis自定义mapper与sql 查询短视频列表api 实现下拉刷新和分页功能 实现数据层mybatis自定义mapper与sql 在数据 ...

  7. 从零开始搭建仿抖音短视频APP-后端开发短视频业务模块(3)

    项目持续更新中: 仿抖音短视频APP专栏 目录 视频详情页展示的数据层实现 视频详情页展示的api实现 短视频下载.复制连接.二维码展示 视频保存到相册 复制链接 二维码展示 实现转为私密或公开视频 ...

  8. 从零开始搭建仿抖音短视频APP-后端消息业务模块开发(2)-基础版完结篇

    项目持续更新中: 仿抖音短视频APP专栏 目录 系统消息入库保存 MongoDB分页查询系统消息列表 删除系统消息 系统消息入库保存 这里还剩下最后一个点赞评论没有完成 这里如果点赞了你的评论,你们视 ...

  9. 从零开始搭建仿抖音短视频APP-开发用户业务模块(3)

    项目持续更新中: 仿抖音短视频APP专栏 目录 注册登录-BO接受前端参数验证 对BO校验进行统一封装 开发用户是否存在 开发创建用户Service 实现短信注册登录与分布式会话 注册登录-BO接受前 ...

最新文章

  1. C++:随笔6---new\delete\虚方法\抽象方法
  2. 设计模式-观察者模式
  3. 逢低买入?比特币、莱特币和比特币现金反弹行情一触即发?
  4. python官网安装步骤-新手Windows下Python下载安装教程及配置注意事项
  5. docker rabbitmq:3.9.10-management
  6. List集合和set集合
  7. MySQL越高版本越快吗_MySQL性能优化的最佳20+条经验
  8. Struts,Spring,Hibernate面试题总结
  9. 傻傻分不清之 Cookie、Session、Token、JWT这次让你彻底搞懂,还不懂你来找我
  10. SQL server int 转char类型
  11. excel格宽度转html像素,使列表框的列宽自动适应内容的宽度?(已有思路但需解决转换成像素问题)...
  12. H.264 NAL层解析
  13. 安全公司-* * * *-面试题:_ 安卓逆向分析分享
  14. elsevier中elsarticle模板如何使用apa引用格式
  15. android代码设置点击涟漪,android – 为自定义CompoundButton添加涟漪效果
  16. 全国计算机二级vb试题库,全国计算机等级考试题库之二级VB试题
  17. 008 [转载]文件后缀查询
  18. 超前进位加法器 verilog代码
  19. 关于单片机上的BOOT0和BOOT1
  20. folly库安装(1)cmake和gcc的安装、升级

热门文章

  1. winrar解压7z分卷
  2. TSDB时序数据库-OpenTSDB
  3. 如何去除视频水印?方法超简单
  4. 安卓手机备份_安卓Android系统,如何备份手机通讯录?
  5. S2--《优化MySchool数据库设计》总结
  6. 高德地图android api定位失败,android 定位没有问题,iOS定位失败获取不到位置信息...
  7. 河北涿州京南经济开发区
  8. MySQL运算符ppt_MySQL常用运算符详解
  9. 安卓入门-动画(Animation)(由简单的单一动画到复杂的时间顺序叠加动画)(XML实现方式+JAVA实现方式)
  10. IaaS(基础设施即服务)