Pārlūkot izejas kodu

feat:1.增加Post分页查询

shanshan 2 gadi atpakaļ
vecāks
revīzija
34101d33a8

+ 0 - 1
src/main/java/cn/seecoder/fdroidrepository/Controller/BugController.java

@@ -4,7 +4,6 @@ import cn.seecoder.fdroidrepository.DataObject.VO.BugVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
 import cn.seecoder.fdroidrepository.Service.BugService;
 import lombok.RequiredArgsConstructor;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.web.bind.annotation.*;
 
 @RestController

+ 0 - 1
src/main/java/cn/seecoder/fdroidrepository/Controller/BuildController.java

@@ -3,7 +3,6 @@ package cn.seecoder.fdroidrepository.Controller;
 import cn.seecoder.fdroidrepository.DataObject.VO.BuildTaskCreateVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
 import cn.seecoder.fdroidrepository.Service.BuildService;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 

+ 11 - 2
src/main/java/cn/seecoder/fdroidrepository/Controller/PostController.java

@@ -1,11 +1,10 @@
 package cn.seecoder.fdroidrepository.Controller;
 
+import cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.PostVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
 import cn.seecoder.fdroidrepository.Service.PostService;
-import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.web.bind.annotation.*;
 
 @RestController
@@ -28,4 +27,14 @@ public class PostController {
     public Response listByUser(@RequestParam("userId") Integer userId) {
         return postService.selectAllPostByUser(userId);
     }
+
+    @PostMapping("/search")
+    public Response search(@RequestBody PostSearchVO postSearchVO) {
+        return postService.search(postSearchVO);
+    }
+
+    @PostMapping("/count")
+    public Response searchCount(@RequestBody PostSearchVO postSearchVO) {
+        return postService.searchCount(postSearchVO);
+    }
 }

+ 1 - 0
src/main/java/cn/seecoder/fdroidrepository/DataObject/PO/PostPO.java

@@ -42,4 +42,5 @@ public class PostPO {
     // AppRate 特有属性
     private Double rate;
     private Integer appId;
+    private String appName;
 }

+ 20 - 0
src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/PostSearchVO.java

@@ -0,0 +1,20 @@
+package cn.seecoder.fdroidrepository.DataObject.VO;
+
+import cn.seecoder.fdroidrepository.DataObject.Enum.PostTypeEnum;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PostSearchVO {
+    private Integer id;
+    private Integer authorId;
+    private PostTypeEnum type;
+    private Boolean valid;
+    private Integer questionId;
+    private Integer replyToId;
+    private Integer appId;
+    private Integer pageNum;
+}

+ 1 - 0
src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/PostVO.java

@@ -41,6 +41,7 @@ public class PostVO {
     // AppRate 特有属性
     private Double rate;
     private Integer appId;
+    private String appName;
 
     public PostVO(PostPO postPO) {
         BeanUtils.copyProperties(postPO, this);

+ 2 - 2
src/main/java/cn/seecoder/fdroidrepository/Mapper/AppContributeRelationMapper.java

@@ -8,8 +8,8 @@ import java.util.List;
 
 @Repository
 public interface AppContributeRelationMapper {
-    @InsertProvider(type = GeneralInsertUpdateSqlProvider.class, method = "insert")
-    Integer insert(@Param("obj") AppContributeRelationPO relation);
+//    @InsertProvider(type = GeneralInsertUpdateSqlProvider.class, method = "insert")
+//    Integer insert(@Param("obj") AppContributeRelationPO relation);
 
     @Insert("insert into app_contribute_relation set app_id = #{appId}, user_id = #{userId}")
     Integer insert(Integer appId, Integer userId);

+ 9 - 0
src/main/java/cn/seecoder/fdroidrepository/Mapper/PostMapper.java

@@ -1,6 +1,8 @@
 package cn.seecoder.fdroidrepository.Mapper;
 
+import cn.seecoder.fdroidrepository.DataObject.Enum.PostTypeEnum;
 import cn.seecoder.fdroidrepository.DataObject.PO.PostPO;
+import cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO;
 import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
 
@@ -20,6 +22,9 @@ public interface PostMapper {
     @Select("select * from post where id = #{postId}")
     PostPO selectById(Integer postId);
 
+    @Select("select * from post where type = #{type} order by update_time desc limit (#{pageNum} - 1) * 10,10")
+    List<PostPO> selectByPage(Integer pageNum, PostTypeEnum type);
+
     @Select("select * from post where author_id = #{authorId} and valid = true")
     List<PostPO> selectByAuthorId(Integer authorId);
 
@@ -31,4 +36,8 @@ public interface PostMapper {
 
     @Select("select * from post where type = 4 and reply_to_id = #{replyToId} and valid = true")
     List<PostPO> selectComments(Integer replyToId);
+
+    List<PostPO> search(PostSearchVO postSearchVO);
+
+    Integer searchCount(PostSearchVO postSearchVO);
 }

+ 8 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/PostService.java

@@ -1,5 +1,7 @@
 package cn.seecoder.fdroidrepository.Service;
 
+import cn.seecoder.fdroidrepository.DataObject.Enum.PostTypeEnum;
+import cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.PostVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
 
@@ -9,4 +11,10 @@ public interface PostService {
     Response updatePost(PostVO postVO);
 
     Response selectAllPostByUser(Integer userId);
+
+    Response selectByPage(Integer pageNum, PostTypeEnum type);
+
+    Response search(PostSearchVO postSearchVO);
+
+    Response searchCount(PostSearchVO postSearchVO);
 }

+ 25 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/PostServiceImpl.java

@@ -5,6 +5,7 @@ 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.PostSearchVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.PostVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
 import cn.seecoder.fdroidrepository.Mapper.AppInfoMapper;
@@ -97,4 +98,28 @@ public class PostServiceImpl implements PostService {
         Map<PostTypeEnum, List<PostVO>> result = postPOList.stream().map(PostVO::new).collect(Collectors.groupingBy(PostVO::getType));
         return Response.buildSuccess(result);
     }
+
+    @Override
+    public Response selectByPage(Integer pageNum, PostTypeEnum type) {
+        if (type == null || pageNum == null || pageNum < 1) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        return Response.buildSuccess(postMapper.selectByPage(pageNum, type));
+    }
+
+    @Override
+    public Response search(PostSearchVO postSearchVO) {
+        if (postSearchVO == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        return Response.buildSuccess(postMapper.search(postSearchVO));
+    }
+
+    @Override
+    public Response searchCount(PostSearchVO postSearchVO) {
+        if (postSearchVO == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        return Response.buildSuccess(postMapper.searchCount(postSearchVO));
+    }
 }

+ 46 - 0
src/main/resources/mapper/PostMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.seecoder.fdroidrepository.Mapper.PostMapper">
+    <resultMap id="PostResultMap" type="cn.seecoder.fdroidrepository.DataObject.PO.PostPO">
+        <id property="id" column="id"/>
+        <result property="authorId" column="author_id"/>
+        <result property="authorName" column="author_name"/>
+        <result property="title" column="title"/>
+        <result property="content" column="content"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="valid" column="valid"/>
+        <result property="type" column="type"/>
+        <result property="topic" column="topic"/>
+        <result property="questionId" column="question_id"/>
+        <result property="questionName" column="question_name"/>
+        <result property="replyToId" column="reply_to_id"/>
+        <result property="rate" column="rate"/>
+        <result property="appId" column="app_id"/>
+        <result property="appName" column="app_name"/>
+    </resultMap>
+
+    <select id="search" resultMap="PostResultMap" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO">
+        select * from post where 1 = 1
+            <if test="type != null"> and type = #{type}</if>
+            <if test="valid != null">and valid = #{valid}</if>
+            <if test="authorId != null">and author_id = #{authorId}</if>
+            <if test="questionId != null">and question_id = #{questionId}</if>
+            <if test="replyToId != null">and reply_to_id = #{replyToId}</if>
+            <if test="appId != null">and app_id = #{appId}</if>
+        order by update_time desc
+        <if test="pageNum != null">
+            limit (#{pageNum} - 1) * 10,10
+        </if>
+    </select>
+
+    <select id="searchCount" resultType="java.lang.Integer" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO">
+        select count(id) from post where 1 = 1
+        <if test="type != null"> and type = #{type}</if>
+        <if test="valid != null">and valid = #{valid}</if>
+        <if test="authorId != null">and author_id = #{authorId}</if>
+        <if test="questionId != null">and question_id = #{questionId}</if>
+        <if test="replyToId != null">and reply_to_id = #{replyToId}</if>
+        <if test="appId != null">and app_id = #{appId}</if>
+    </select>
+</mapper>