Browse Source

feat:1.修改关于Post的接口

shanshan 2 years ago
parent
commit
f635f8d8c4

+ 2 - 1
src/main/java/cn/seecoder/fdroidrepository/DataObject/Enum/PostTypeEnum.java

@@ -4,7 +4,8 @@ public enum PostTypeEnum {
     ARTICLE(1),
     QUESTION(2),
     ANSWER(3),
-    COMMENT(4);
+    COMMENT(4),
+    APPRATE(5);
     private Integer value;
     PostTypeEnum(Integer value) {
         this.value = value;

+ 5 - 2
src/main/java/cn/seecoder/fdroidrepository/DataObject/PO/PostPO.java

@@ -28,8 +28,7 @@ public class PostPO {
     private PostTypeEnum type;
 
     // Article 特有属性
-    private Integer topicId;
-    private String topicName;
+    private String topic;
 
     // Question 特有属性
 
@@ -39,4 +38,8 @@ public class PostPO {
 
     // Comment 特有属性
     private Integer replyToId;
+
+    // AppRate 特有属性
+    private Double rate;
+    private Integer appId;
 }

+ 5 - 2
src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/PostVO.java

@@ -27,8 +27,7 @@ public class PostVO {
     private PostTypeEnum type;
 
     // Article 特有属性
-    private Integer topicId;
-    private String topicName;
+    private String topic;
 
     // Question 特有属性
 
@@ -39,6 +38,10 @@ public class PostVO {
     // Comment 特有属性
     private Integer replyToId;
 
+    // AppRate 特有属性
+    private Double rate;
+    private Integer appId;
+
     public PostVO(PostPO postPO) {
         BeanUtils.copyProperties(postPO, this);
     }

+ 29 - 2
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/PostServiceImpl.java

@@ -2,17 +2,17 @@ package cn.seecoder.fdroidrepository.Service.ServiceImpl;
 
 import cn.seecoder.fdroidrepository.DataObject.Enum.PostTypeEnum;
 import cn.seecoder.fdroidrepository.DataObject.Enum.ResultCode;
+import cn.seecoder.fdroidrepository.DataObject.PO.AppInfoPO;
 import cn.seecoder.fdroidrepository.DataObject.PO.PostLogPO;
 import cn.seecoder.fdroidrepository.DataObject.PO.PostPO;
 import cn.seecoder.fdroidrepository.DataObject.VO.PostVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.Mapper.AppInfoMapper;
 import cn.seecoder.fdroidrepository.Mapper.PostLogMapper;
 import cn.seecoder.fdroidrepository.Mapper.PostMapper;
 import cn.seecoder.fdroidrepository.Service.PostService;
-import javafx.geometry.Pos;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
-import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -25,12 +25,25 @@ import java.util.stream.Collectors;
 public class PostServiceImpl implements PostService {
     private final PostMapper postMapper;
     private final PostLogMapper postLogMapper;
+    private final AppInfoMapper appInfoMapper;
 
     @Override
     public Response createPost(PostVO postVO) {
         PostPO postPO = new PostPO();
         BeanUtils.copyProperties(postVO, postPO);
         postPO.setUpdateTime(new Date(System.currentTimeMillis()));
+        if (PostTypeEnum.APPRATE.equals(postPO.getType())) {
+            if (postPO.getRate() == null || postPO.getRate() < 0 || postPO.getRate() > 5.0 || postPO.getAppId() == null) {
+                return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+            }
+            AppInfoPO appInfo = appInfoMapper.selectById(postPO.getAppId());
+            if (appInfo == null) {
+                return Response.buildFailure(ResultCode.APPINFO_NON_EXIST.getCode(), ResultCode.APPINFO_NON_EXIST.getMessage());
+            }
+            appInfo.setRate((appInfo.getRate() * appInfo.getRateCount() + postPO.getRate()) / (appInfo.getRateCount() + 1));
+            appInfo.setRateCount(appInfo.getRateCount() + 1);
+            appInfoMapper.updateAppInfo(appInfo);
+        }
         Integer postId = postMapper.insert(postPO);
         return Response.buildSuccess(postId);
     }
@@ -40,6 +53,10 @@ public class PostServiceImpl implements PostService {
         if (postVO.getId() == null) {
             return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
         }
+        if (PostTypeEnum.APPRATE.equals(postVO.getType()) &&
+                (postVO.getAppId() == null || postVO.getRate() == null || postVO.getRate() < 0 || postVO.getRate() > 5.0)) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
         PostPO oldPost = postMapper.selectById(postVO.getId());
         if (oldPost == null || !oldPost.getValid()) {
             return Response.buildFailure(ResultCode.POST_NON_EXIST.getCode(), ResultCode.POST_NON_EXIST.getMessage());
@@ -47,6 +64,16 @@ public class PostServiceImpl implements PostService {
         PostPO newPost = new PostPO();
         BeanUtils.copyProperties(postVO, newPost);
         newPost.setUpdateTime(new Date(System.currentTimeMillis()));
+        // 更新应用的评分信息
+        if (PostTypeEnum.APPRATE.equals(postVO.getType())) {
+            AppInfoPO appInfoPO = appInfoMapper.selectById(postVO.getAppId());
+            if (appInfoPO == null) {
+                return Response.buildFailure(ResultCode.APPINFO_NON_EXIST.getCode(), ResultCode.APPINFO_NON_EXIST.getMessage());
+            }
+            Double newRateSum = appInfoPO.getRate() * appInfoPO.getRateCount() - oldPost.getRate() + newPost.getRate();
+            appInfoPO.setRate(newRateSum / appInfoPO.getRateCount());
+            appInfoMapper.updateAppInfo(appInfoPO);
+        }
         postMapper.update(newPost);
         // 在PostLog中增加新的历史记录
         if (PostTypeEnum.ARTICLE.equals(postVO.getType()) || PostTypeEnum.QUESTION.equals(postVO.getType())