交友项目【动态点赞动态喜欢】

news2024/9/20 9:01:46

目录

1:点赞

1.1:动态点赞

1.1.1:分析&实现

1.2:取消点赞

1.2.1:分析&实现

2:喜欢

2.1:动态喜欢

2.1.1:分析&实现

2.2:取消喜欢

2.2.2:分析&实现


1:点赞

1.1:动态点赞

接口地址: http://192.168.136.160:3000/project/19/interface/api/157

1.1.1:分析&实现

接收到前端传入的动态id,到数据库修改对应的动态点赞数量,返回动态信息处理到redis缓存中,用来解决点赞前端点赞图标,点了动态赞要一直显示高亮。

    @GetMapping("/{id}/like")
    public ResponseEntity likemovement(@PathVariable("id") ObjectId id){
        Movement likemovement = movementService.likemovement(id, UserHolder.getUserId());
        return ResponseEntity.ok(likemovement.getLikeCount());
    }
    public Movement likemovement(ObjectId id,Long userId) {
        Movement movement = movementApi.likemovement(id);
        //将当前用户的点赞状态存入redis中
        String key = "MOVEMENTS_INTERACT_KEY"+movement.getId();
        String hashKey = "MOVEMENTS_LIKE_HASHKEY" + userId;
        stringRedisTemplate.opsForHash().put(key,hashKey,"1");
        return movement;
    }
Movement likemovement(ObjectId id);
    @Override
    public Movement likemovement(ObjectId id) {
        //通过动态id查询到该条动态
        Query query = new Query().addCriteria(Criteria.where("id").is(id));
        Movement movement = mongoTemplate.findOne(query, Movement.class);
        //得到点赞数量
        Integer likeCount = movement.getLikeCount();
        //修改数据库点赞数量
        Update update = new Update().set("likeCount", likeCount + 1);
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Movement.class);
        return mongoTemplate.findOne(query,Movement.class);
    }

1.2:取消点赞

接口地址: http://192.168.136.160:3000/project/19/interface/api/160

1.2.1:分析&实现

接收到前端传入的动态id,到数据库修改对应的动态点赞数量,返回动态信息处理到redis缓存中,用来解决取消点赞前端点赞图标,取消动态赞不要显示高亮。

    @GetMapping("/{id}/dislike")
    public ResponseEntity dislikemovement(@PathVariable("id") ObjectId id){
        Movement dislikemovement = movementService.dislikemovement(id, UserHolder.getUserId());
        return ResponseEntity.ok(dislikemovement.getLikeCount());
    }
    public Movement dislikemovement(ObjectId id, Long userId) {
        Movement movement = movementApi.dislikemovement(id);
        //将当前用户的点赞状态存入redis中
        String key = "MOVEMENTS_INTERACT_KEY"+movement.getId();
        String hashKey = "MOVEMENTS_LIKE_HASHKEY" + userId;
        stringRedisTemplate.opsForHash().delete(key,hashKey);
        return movement;
    }
    Movement dislikemovement(ObjectId id);
    @Override
    public Movement dislikemovement(ObjectId id) {
        //通过动态id查询到该条动态
        Query query = new Query().addCriteria(Criteria.where("id").is(id));
        Movement movement = mongoTemplate.findOne(query, Movement.class);
        //得到点赞数量
        Integer likeCount = movement.getLikeCount();
        //修改数据库点赞数量
        Update update = new Update().set("likeCount", likeCount - 1);
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Movement.class);

        return mongoTemplate.findOne(query,Movement.class);
    }

2:喜欢

2.1:动态喜欢

接口地址: http://192.168.136.160:3000/project/19/interface/api/163

2.1.1:分析&实现

接收到前端传入的动态id,到数据库修改对应的动态喜欢数量,返回动态信息处理到redis缓存中,用来解决喜欢前端喜欢图标,点了动态喜欢要一直显示高亮。

    @GetMapping("/{id}/love")
    public ResponseEntity loveemovement(@PathVariable("id") ObjectId id){
        Movement loveemovement = movementService.loveemovement(id, UserHolder.getUserId());
        return ResponseEntity.ok(loveemovement.getLoveCount());
    }
    public Movement loveemovement(ObjectId id, Long userId) {
        Movement movement = movementApi.loveemovement(id);
        //将当前用户的点赞状态存入redis中
        String key = "MOVEMENTS_LOVE_KEY"+movement.getId();
        String hashKey = "MOVEMENTS_LOVE_HASHKEY" + userId;
        stringRedisTemplate.opsForHash().put(key,hashKey,"1");
        return movement;
    }
Movement loveemovement(ObjectId id);
    @Override
    public Movement loveemovement(ObjectId id) {
        //通过动态id查询到该条动态
        Query query = new Query().addCriteria(Criteria.where("id").is(id));
        Movement movement = mongoTemplate.findOne(query, Movement.class);
        //得到点赞数量
        Integer loveCount = movement.getLoveCount();
        //修改数据库点赞数量
        Update update = new Update().set("loveCount", loveCount + 1);
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Movement.class);
        return mongoTemplate.findOne(query,Movement.class);
    }

2.2:取消喜欢

接口地址: http://192.168.136.160:3000/project/19/interface/api/166

2.2.2:分析&实现

接收到前端传入的动态id,到数据库修改对应的动态喜欢数量,返回动态信息处理到redis缓存中,用来解决喜欢前端喜欢图标,取消动态喜欢不显示高亮。

    @GetMapping("/{id}/unlove")
    public ResponseEntity unlovemovement(@PathVariable("id") ObjectId id){
        Movement unlovemovement = movementService.unlovemovement(id, UserHolder.getUserId());
        return ResponseEntity.ok(unlovemovement.getLoveCount());
    }
    public Movement unlovemovement(ObjectId id, Long userId) {
        Movement movement = movementApi.unlovemovement(id);
        //将当前用户的点赞状态存入redis中
        String key = "MOVEMENTS_LOVE_KEY"+movement.getId();
        String hashKey = "MOVEMENTS_LOVE_HASHKEY" + userId;
        stringRedisTemplate.opsForHash().delete(key,hashKey);
        return movement;
    }
Movement unlovemovement(ObjectId id);
    @Override
    public Movement unlovemovement(ObjectId id) {
        //通过动态id查询到该条动态
        Query query = new Query().addCriteria(Criteria.where("id").is(id));
        Movement movement = mongoTemplate.findOne(query, Movement.class);
        //得到点赞数量
        Integer loveCount = movement.getLoveCount();
        //修改数据库点赞数量
        Update update = new Update().set("loveCount", loveCount - 1);
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Movement.class);
        return mongoTemplate.findOne(query,Movement.class);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学成在线笔记+踩坑(5)——【媒资模块】上传视频,断点续传

目录 5 上传视频 5.1 媒资管理页面上传视频流程预览 5.2 断点续传技术 5.2.1 什么是断点续传 5.2.2 测试分块与合并,RandomAccessFile随机流 5.2.3 视频上传流程 5.2.4 测试minio合并文件 5.3 接口定义,检查文件/分块、上传分块、合并分块 5.4…

4年外包终上岸,我只能说这类公司能不去就不去

我大学学的是计算机专业,毕业的时候,对于找工作比较迷茫,也不知道当时怎么想的,一头就扎进了一家外包公司,一干就是4年。现在终于跳槽到了互联网公司了,我想说的是,但凡有点机会,千万…

类图(类之间的关系)

一.概述 类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。在软件工程中,类图是一种静态的结构图,描述了系统的类的集合…

基于Powell共轭方向法的UWB室内定位构型优化算法

基于Powell共轭方向法的UWB室内定位构型优化算法 阚昊宇 摘要: UWB室内定位系统的服务性能及定位精度很大程度上受UWB基站构型影响,而GDOP是衡量系统定位服务性能的重要指标。目前关于UWB室内定位基站构型的讨论主要集中于最小化限定基站数目下GDOP在自…

【系统集成项目管理工程师】项目资源管理

💥十大知识领域:项目资源管理 项目资源管理包括以下 4 个过程: 编制项目人力资源计划组建项目团队建设项目团队管理项目团队 一、编制项目人力资源计划 确定与识别项目中的角色、所需技能、分配项目职责和汇报关系,并记录下来形成书面文件&am…

CDN如何阻止网络攻击

随着网络技术的发展,网络攻击事件也越来越多,对企业和个人的安全和稳定造成严重威胁。为此,高防CDN应运而生,成为广大用户保障网络安全的重要工具。什么是高防CDN?高防CDN的特点有哪些?高防CDN如何阻止网络攻击?接下来让我们一…

【云原生|Docker】14-Dokcer Harbor高可用部署

【云原生Docker】14-Dokcer Harbor高可用部署 文章目录 【云原生Docker】14-Dokcer Harbor高可用部署前言Harbor高可用方案单主复制双主复制多Harbor共享后端存储 Harbor高可用部署方案说明环境说明部署步骤安装nfs安装redis和PostgreSQL安装harbor配置nginx访问测试 总结 前言…

netty源码学习之-HashedWheelTimer

netty源码学习之-HashedWheelTimer 概述使用相关概念解析时间轮 运行时序图 源码workerHashedWheelTimeoutHashedWheelBucket 概述 该部分源码是netty的时间轮,netty的时间轮是单轮,其他时间轮是多轮设计,今天先了解下netty的时间轮设计 使用…

hot100:数组——49、53、55

49. 字母异位词分组 用hashmap存储&#xff0c;其中每个key&#xff0c;用这组异位词的排序后的字符串&#xff1b;value是这组异位词。比如“tea”和“ate”是一组异位词&#xff0c;他们的排序结果都是“aet”。 public List<List<String>> groupAnagrams(Stri…

交流电中的无功功率和有功功率,减少无功功率

有功&#xff0c;无功功率 从字面上理解就是做功和不做功的功率。不做功的是因为负载电路中有电感和电容的存在。 电容和电感的电压电流关系 设加在两端的电压都是 U U m a x s i n w t UU_{max}sinwt UUmax​sinwt 电容和电感两端电压电流的关系 电容两端的电压电流关系…

Javaee Spring基于XML的AOP开发

快速入门 1. 导入 AOP 相关坐标 2. 创建目标接口和目标类&#xff08;内部有切点&#xff09; 3. 创建切面类&#xff08;内部有增强方法&#xff09; 4. 将目标类和切面类的对象创建权交给 spring 5. 在 applicationContext.xml 中配置织入关系 6. 测试代码 项目…

【数据库】MySQL数据约束和表关系详解

目录 1.数据库约束 1.1约束类型 1.2NULL约束 1.3UNIQUE&#xff1a;唯一约束 1.4DEFAULT&#xff1a;默认值约束 1.5PRIMARY&#xff1a;主键约束 1.6FOREIGH KEY:外键约束 2.表的关系 2.1一对一 2.2一对多 2.3多对多 1.数据库约束 数据库中的数据保存在数据表中&am…

数据库基础篇 《9. 子查询》

目录 1. 需求分析与问题解决 1.1 实际问题 1.2 子查询的基本使用 ​编辑1.3 子查询的分类 分类方式1&#xff1a;我们按内查询的结果返回一条还是多条记录&#xff0c;将子查询分为 单行子查询 、 多行子查询 。 分类方式2&#xff1a; 我们按内查询是否被执行多次&#x…

4WE10D50型力士乐液压阀规格

安装位置 可选择&#xff0c;方向阀最好水平安装&#xff01;对于阀品种&#xff0c;如 &#xff0d; 不带阀芯对中弹簧 &#xff0d; 或带下垂电磁铁 其他安装位置能够导致功能失常或违反有关的技朮规定。 带泄油口的压力开关的安装位置必须选择&#xff0c;使它的泄油口…

Redis源码分析之网络模型

Redis网络模型 阅读源码的初衷Redis源码阅读 阅读源码的初衷 很多网上解释这个Redis为啥这么块&#xff1f;都会说Redis这么快的原因会有一个Redis才用了单线程&使用了多路io复用来检查io事件&#xff0c;单线程可以避免多线程对资源的竞争。如果我们使用了多线程那么就需…

Revit中栏杆扶手、坡道的绘制及插件太多问题

一、在Revit中栏杆与扶手的绘制方法有两种&#xff1a; ①绘制路径 ②放置在主体上 二、执行方式 功能区&#xff1a;“建筑”选项卡“楼梯坡道”面板“栏杆扶手”下拉菜单“绘制路径”。 三、绘制技巧 首先我们一起来看看如何设置栏杆扶手属性。 第一步&#xff1a;设置属…

【vue3学习系列】对比vue2生命周期做了哪些改变,vue3初学者快来看看

文章目录 前言官方生命周期图分析去除beforeCreate与createdsetup代替created其他钩子只是改了名称 剔除vue2后的生命周期图其他钩子函数keepalive错误捕获其他的一些钩子去官方文档看看即可 前言 看了下官方的生命周期的说明&#xff0c;感觉讲的不算太清晰&#xff0c;所以个…

C++ 内联函数(inline)

内联函数&#xff1a;就是在函数前加inline 让函数在调用的地方直接展开 可是内联函数有什么作用呢&#xff1f;&#xff1f; 我们都知道&#xff0c;如果调用一个函数的话&#xff0c;会建立栈帧&#xff0c;在建立栈帧的时候会进行压栈等一系列操作。 而内联函数会在调用的…

Nginx和tomcat反向代理

七层反向代理 实验准备&#xff1a;准备三台虚拟机 192.168.146.20 tomcat&#xff08;两个&#xff09; 192.168.146.30 tomcat 192.168.146.50 七层反向代理&#xff08;nginx&#xff09; 部署虚拟机192.168.146.20&#xff08;两个tomcat已部署完毕&#xff09; …

SwiftUI 4.0(iOS 16)极简实现一个美美哒的多选 Toggle 按钮组

概览 在 SwiftUI 4.0 之前&#xff0c;想要实现如下效果的多选/全选 Toggle 按钮组是要写不少行代码滴&#xff1a; 不过&#xff0c;在 iOS 16 之后我们仅用1行代码即可搞定以上所有&#xff01;在某些场合下这非常有用哦。 在本篇博文中&#xff0c;我们就来看看如何实现它…