IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 从零开始搭建仿抖音短视频APP--后端开发粉丝业务模块(3) -> 正文阅读

[大数据]从零开始搭建仿抖音短视频APP--后端开发粉丝业务模块(3)

项目持续创作中:

仿抖音短视频APP专栏

目录

实现用户点赞视频

用户取消点赞

用户是否点赞视频的判断


实现用户点赞视频

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

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

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

首先在我们的service中:

?实现:

  @Transactional
    @Override
    public 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
    @Override
    public 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中查询我是否点赞过这条视频。

  @Override
    public 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;
    }

重启,测试:

我们进行一个下拉刷新

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:04:09  更:2022-10-31 12:04:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/30 3:36:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码