Kaynağa Gözat

feature: add post like module

ggbocoder 2 yıl önce
ebeveyn
işleme
7a3581ebbc

+ 5 - 0
README.md

@@ -1,2 +1,7 @@
 # FdroidRepository
 
+## 评论点赞设计
+- Redis存最火的10条评论,用set存给这些评论点赞的用户
+- 其它评论用Mysql进行操作
+- Redis定时更新
+

+ 25 - 0
src/main/java/cn/seecoder/fdroidrepository/Controller/LikeController.java

@@ -0,0 +1,25 @@
+package cn.seecoder.fdroidrepository.Controller;
+
+
+import cn.seecoder.fdroidrepository.Service.ServiceImpl.RedisLikeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/like")
+public class LikeController {
+
+    @Autowired
+    private RedisLikeService likeService;
+
+    /**
+     *
+     * @param postId commentId
+     * @param userId userId
+     */
+    @GetMapping("/")
+    public void like(@RequestParam String postId,@RequestParam String userId){
+        likeService.operateLike2Redis(userId,postId);
+    }
+
+}

+ 24 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/LikeService.java

@@ -0,0 +1,24 @@
+package cn.seecoder.fdroidrepository.Service;
+
+public interface LikeService {
+    /**
+     * 如果该用户没有给评论点过赞,则点赞;反之取消点赞
+     * @param userId userId
+     * @param postId postId
+     */
+    void operateLike2Redis(String userId,String postId);
+
+    /**
+     * 用户是否给该评论点过赞
+     * @param userId userId
+     * @param postId postId
+     * @return 0->没有点过赞,1->点过赞
+     */
+    boolean userPostStatus(String userId,String postId);
+
+    /**
+     *
+     * @param postId postId
+     */
+    Long getPostLikeSum(String postId);
+}

+ 50 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/RedisLikeService.java

@@ -0,0 +1,50 @@
+package cn.seecoder.fdroidrepository.Service.ServiceImpl;
+
+import cn.seecoder.fdroidrepository.Service.LikeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.SetOperations;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RedisLikeService implements LikeService {
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    @Override
+    public void operateLike2Redis(String userId, String postId) {
+        String likeKey = getLikeKey(postId);
+        SetOperations<String, String> setOps = redisTemplate.opsForSet();
+
+        // 判断用户是否已经点赞
+        if (userPostStatus(userId, postId)) {
+            // 用户已点赞,取消点赞
+            setOps.remove(likeKey, userId);
+        } else {
+            // 用户未点赞,进行点赞
+            setOps.add(likeKey, userId);
+        }
+    }
+
+    @Override
+    public boolean userPostStatus(String userId, String postId) {
+        String likeKey = getLikeKey(postId);
+        SetOperations<String, String> setOps = redisTemplate.opsForSet();
+
+        // 判断用户是否已经点赞
+        return setOps.isMember(likeKey, userId);
+    }
+
+    @Override
+    public Long getPostLikeSum(String postId) {
+        String likeKey = getLikeKey(postId);
+        SetOperations<String, String> setOps = redisTemplate.opsForSet();
+
+        // 获取点赞总数并打印
+        return setOps.size(likeKey);
+    }
+
+    private String getLikeKey(String postId) {
+        return "like:" + postId;
+    }
+}