From 1c17fe5a330694671a801b5cc032800f6dd8c29d Mon Sep 17 00:00:00 2001 From: johnniang Date: Mon, 4 Mar 2019 00:07:11 +0800 Subject: [PATCH] Refactor cc.ryanc.halo.web.controller.api.ApiPostController(issue: #106) again --- .../java/cc/ryanc/halo/utils/HaloUtils.java | 25 ++++++-- .../web/controller/api/ApiPostController.java | 62 +++++++++---------- 2 files changed, 52 insertions(+), 35 deletions(-) diff --git a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java index 9db3c2275..0b1e6e357 100755 --- a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java +++ b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java @@ -2,6 +2,7 @@ package cc.ryanc.halo.utils; import cc.ryanc.halo.model.dto.BackupDto; import cc.ryanc.halo.model.dto.Theme; +import cc.ryanc.halo.model.enums.BlogPropertiesEnum; import cc.ryanc.halo.model.enums.CommonParamsEnum; import cn.hutool.core.io.FileUtil; import cn.hutool.core.text.StrBuilder; @@ -24,6 +25,8 @@ import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.BasicFileAttributes; import java.util.*; +import static cc.ryanc.halo.model.dto.HaloConst.OPTIONS; + /** *
  * 常用工具
@@ -35,6 +38,21 @@ import java.util.*;
 @Slf4j
 public class HaloUtils {
 
+    private final static int DEFAULT_PAGE_SIZE = 10;
+
+    /**
+     * Gets default page size.
+     *
+     * @return default page size
+     */
+    public static int getDefaultPageSize() {
+        if (StrUtil.isNotBlank(OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) {
+            return Integer.parseInt(OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()));
+        }
+
+        return DEFAULT_PAGE_SIZE;
+    }
+
     /**
      * 获取备份文件信息
      *
@@ -48,7 +66,7 @@ public class HaloUtils {
         final File srcPath = new File(srcPathStr.toString());
         final File[] files = srcPath.listFiles();
         final List backupDtos = new ArrayList<>();
-        BackupDto backupDto = null;
+        BackupDto backupDto;
         // 遍历文件
         if (null != files) {
             for (File file : files) {
@@ -107,8 +125,7 @@ public class HaloUtils {
         BasicFileAttributes attr;
         try {
             attr = basicview.readAttributes();
-            final Date createDate = new Date(attr.creationTime().toMillis());
-            return createDate;
+            return new Date(attr.creationTime().toMillis());
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -147,7 +164,7 @@ public class HaloUtils {
             final File themesPath = new File(basePath.getAbsolutePath(), "templates/themes");
             final File[] files = themesPath.listFiles();
             if (null != files) {
-                Theme theme = null;
+                Theme theme;
                 for (File file : files) {
                     if (file.isDirectory()) {
                         if (StrUtil.equals("__MACOSX", file.getName())) {
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java
index ed43b930e..5e2cadfc8 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java
@@ -5,7 +5,6 @@ import cc.ryanc.halo.model.domain.Category;
 import cc.ryanc.halo.model.domain.Post;
 import cc.ryanc.halo.model.domain.Tag;
 import cc.ryanc.halo.model.dto.JsonResult;
-import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
 import cc.ryanc.halo.model.enums.PostStatusEnum;
 import cc.ryanc.halo.model.enums.PostTypeEnum;
 import cc.ryanc.halo.service.CategoryService;
@@ -19,12 +18,9 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.web.SortDefault;
 import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import static cc.ryanc.halo.model.dto.HaloConst.OPTIONS;
+import static cc.ryanc.halo.utils.HaloUtils.getDefaultPageSize;
 import static org.springframework.data.domain.Sort.Direction.DESC;
 
 /**
@@ -114,14 +110,27 @@ public class ApiPostController {
      * @return JsonResult
      */
     @GetMapping(value = "/page/{page}")
-    public JsonResult posts(@PathVariable(value = "page") Integer page, @SortDefault(sort = "postDate", direction = DESC) Sort sort) {
-        int size = 10;
-        if (StrUtil.isNotBlank(OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) {
-            size = Integer.parseInt(OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()));
+    public JsonResult posts(@PathVariable(value = "page") Integer page,
+                            @SortDefault(sort = "postDate", direction = DESC) Sort sort,
+                            @RequestParam(value = "cateUrl", required = false) String cateUrl,
+                            @RequestParam(value = "tagUrl", required = false) String tagUrl) {
+        // Build page info
+        Pageable pageable = PageRequest.of(page - 1, getDefaultPageSize(), sort);
+
+        Page postPage;
+
+        if (StrUtil.isNotBlank(cateUrl)) {
+            // Query by category url
+            postPage = postService.findPostByCategories(categoryService.findByCateUrl(cateUrl), pageable);
+        } else if (StrUtil.isNotBlank(tagUrl)) {
+            // Query by tag url
+            postPage = postService.findPostsByTags(tagService.findByTagUrl(tagUrl), pageable);
+        } else {
+            // Query default
+            postPage = postService.findPostByStatus(PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc(), pageable);
         }
-        final Pageable pageable = PageRequest.of(page - 1, size, sort);
-        final Page posts = postService.findPostByStatus(PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc(), pageable);
-        return JsonResult.ok(HttpStatus.OK.getReasonPhrase(), posts);
+
+        return JsonResult.ok(HttpStatus.OK.getReasonPhrase(), postPage);
     }
 
     /**
@@ -182,20 +191,15 @@ public class ApiPostController {
      * @return String
      */
     @GetMapping(value = "/categories/{cateUrl}/{page}")
+    @Deprecated
     public JsonResult categories(@PathVariable("cateUrl") String cateUrl,
                                  @PathVariable("page") Integer page,
                                  @SortDefault(sort = "postDate", direction = DESC) Sort sort) {
         final Category category = categoryService.findByCateUrl(cateUrl);
-        int size = 10;
-        if (StrUtil.isNotBlank(OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) {
-            size = Integer.parseInt(OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()));
-        }
-        final Pageable pageable = PageRequest.of(page - 1, size, sort);
+        final Pageable pageable = PageRequest.of(page - 1, getDefaultPageSize(), sort);
         final Page posts = postService.findPostByCategories(category, pageable);
-        if (null == posts) {
-            return new JsonResult(HttpStatus.NO_CONTENT.value(), HttpStatus.NO_CONTENT.getReasonPhrase());
-        }
-        return new JsonResult(HttpStatus.OK.value(), HttpStatus.OK.getReasonPhrase(), posts);
+
+        return JsonResult.ok(HttpStatus.OK.getReasonPhrase(), posts);
     }
 
 
@@ -207,19 +211,15 @@ public class ApiPostController {
      * @return String
      */
     @GetMapping(value = "/tags/{tagUrl}/{page}")
+    @Deprecated
     public JsonResult tags(@PathVariable("tagUrl") String tagUrl,
                            @PathVariable("page") Integer page,
                            @SortDefault(sort = "postDate", direction = DESC) Sort sort) {
         final Tag tag = tagService.findByTagUrl(tagUrl);
-        int size = 10;
-        if (StrUtil.isNotBlank(OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) {
-            size = Integer.parseInt(OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()));
-        }
-        final Pageable pageable = PageRequest.of(page - 1, size, sort);
+        final Pageable pageable = PageRequest.of(page - 1, getDefaultPageSize(), sort);
         final Page posts = postService.findPostsByTags(tag, pageable);
-        if (null == posts) {
-            return new JsonResult(HttpStatus.NO_CONTENT.value(), HttpStatus.NO_CONTENT.getReasonPhrase());
-        }
-        return new JsonResult(HttpStatus.OK.value(), HttpStatus.OK.getReasonPhrase(), posts);
+
+        return JsonResult.ok(HttpStatus.OK.getReasonPhrase(), posts);
     }
+
 }