فهرست منبع

update content-service/vod RecommendService

reghao 7 ماه پیش
والد
کامیت
f314f69628

+ 10 - 16
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/controller/RecommendController.java

@@ -1,5 +1,6 @@
 package cn.reghao.tnb.content.app.vod.controller;
 
+import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.web.WebResult;
 import cn.reghao.tnb.common.auth.AuthUser;
 import cn.reghao.tnb.common.auth.UserContext;
@@ -47,27 +48,20 @@ public class RecommendController {
         return WebResult.success(list);
     }
 
-    @AuthUser
-    @Operation(summary = "获取用户推荐模式", description = "N")
-    @GetMapping(value = "/user", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getUserRcmd() {
-        long userId1 = UserContext.getUserId();
-        int mode = userService.getRecommendMode(userId1);
-        return WebResult.success(mode == 1);
-    }
-
     @AuthUser
     @Operation(summary = "设置用户推荐模式", description = "N")
     @PostMapping(value = "/user", produces = MediaType.APPLICATION_JSON_VALUE)
     public String setUserRcmd(@RequestBody @Validated UserRcmd userRcmd) {
-        long userId1 = UserContext.getUserId();
-        boolean vip = userService.isVip(userId1);
-        if (userRcmd.getMode() && !vip) {
-            return WebResult.failWithMsg("此功能仅对 VIP 用户开放");
-        }
+        Result result = recommendService.setRecommendMode(userRcmd.getMode());
+        return WebResult.result(result);
+    }
 
-        userService.setRecommendMode(userId1, userRcmd.getMode());
-        return WebResult.success();
+    @AuthUser
+    @Operation(summary = "获取用户推荐模式", description = "N")
+    @GetMapping(value = "/user", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String getUserRcmd() {
+        boolean enableRcmd = recommendService.getRecommendMode();
+        return WebResult.success(enableRcmd);
     }
 
     @AuthUser

+ 3 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/RecommendService.java

@@ -1,5 +1,6 @@
 package cn.reghao.tnb.content.app.vod.service;
 
+import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.tnb.common.db.PageScroll;
 import cn.reghao.tnb.content.app.vod.model.po.BannerVideo;
 import cn.reghao.tnb.content.api.dto.VideoCard;
@@ -19,4 +20,6 @@ public interface RecommendService {
     String getSimilarVideos(String videoId);
     PageScroll<VideoCard> getVideoTimeline(long userId, String nextIdStr);
     List<BannerVideoVO> getBannerVideos();
+    Result setRecommendMode(boolean mode);
+    boolean getRecommendMode();
 }

+ 28 - 1
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/impl/RecommendServiceImpl.java

@@ -1,11 +1,14 @@
 package cn.reghao.tnb.content.app.vod.service.impl;
 
+import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.web.ServletUtil;
 import cn.reghao.jutil.web.WebResult;
+import cn.reghao.tnb.common.auth.UserContext;
 import cn.reghao.tnb.common.db.PageScroll;
 import cn.reghao.tnb.content.api.dto.VideoCard;
 import cn.reghao.tnb.content.api.dto.VideoPostCard;
 import cn.reghao.tnb.content.app.util.redis.ds.RedisList;
+import cn.reghao.tnb.content.app.util.redis.ds.RedisOps;
 import cn.reghao.tnb.content.app.vod.db.mapper.VideoPostMapper;
 import cn.reghao.tnb.content.app.vod.model.po.VideoPost;
 import cn.reghao.tnb.content.app.vod.model.query.VideoQuery;
@@ -43,16 +46,18 @@ public class RecommendServiceImpl implements RecommendService {
     private final RedisSet redisSet;
     private final RedisList redisList;
     private final RcmdProducer rcmdProducer;
+    private RedisOps redisOps;
 
     public RecommendServiceImpl(ContentPermission contentPermission, VideoPostMapper videoPostMapper,
                                 VideoPostQuery videoPostQuery, RedisSet redisSet, RedisList redisList,
-                                RcmdProducer rcmdProducer) {
+                                RcmdProducer rcmdProducer, RedisOps redisOps) {
         this.contentPermission = contentPermission;
         this.videoPostMapper = videoPostMapper;
         this.videoPostQuery = videoPostQuery;
         this.redisSet = redisSet;
         this.redisList = redisList;
         this.rcmdProducer = rcmdProducer;
+        this.redisOps = redisOps;
     }
 
     public List<VideoCard> getRecommendVideos(long userId, String nextId) {
@@ -152,4 +157,26 @@ public class RecommendServiceImpl implements RecommendService {
     public List<BannerVideoVO> getBannerVideos() {
         return videoPostQuery.getBannerVideos();
     }
+
+    public Result setRecommendMode(boolean mode) {
+        long loginUser = UserContext.getUserId();
+        boolean vip = userService.isVip(loginUser);
+        if (mode && !vip) {
+            return Result.fail("此功能仅对 VIP 用户开放");
+        }
+
+        userService.setRecommendMode(loginUser, mode);
+        if (getRecommendMode()) {
+            String itemsKey = RedisKeys.getUserItemKey(loginUser);
+            redisOps.del(itemsKey);
+        }
+
+        return Result.success();
+    }
+
+    public boolean getRecommendMode() {
+        long userId1 = UserContext.getUserId();
+        int mode = userService.getRecommendMode(userId1);
+        return mode == 1;
+    }
 }