From 7898b777dbb27f41d91e77ef21cd44471531cc61 Mon Sep 17 00:00:00 2001 From: johnniang Date: Tue, 19 Mar 2019 18:32:15 +0800 Subject: [PATCH] Add PostController --- .../halo/config/SwaggerConfiguration.java | 9 +++++ .../ryanc/halo/listener/StartedListener.java | 15 ++++---- .../cc/ryanc/halo/model/enums/ValueEnum.java | 6 ++-- .../ryanc/halo/model/support/HaloConst.java | 6 ++++ .../cc/ryanc/halo/service/OptionService.java | 36 +++++++++++++++++-- .../halo/service/impl/OptionServiceImpl.java | 24 +++++++++++-- .../controller/admin/api/PostController.java | 32 +++++++++++++++++ .../content/base/BaseContentController.java | 4 ++- .../web/controller/core/CommonController.java | 3 +- .../controller/core/InstallController.java | 3 +- 10 files changed, 120 insertions(+), 18 deletions(-) create mode 100644 src/main/java/cc/ryanc/halo/web/controller/admin/api/PostController.java diff --git a/src/main/java/cc/ryanc/halo/config/SwaggerConfiguration.java b/src/main/java/cc/ryanc/halo/config/SwaggerConfiguration.java index b93eb124f..cd0f9fdf8 100644 --- a/src/main/java/cc/ryanc/halo/config/SwaggerConfiguration.java +++ b/src/main/java/cc/ryanc/halo/config/SwaggerConfiguration.java @@ -67,6 +67,15 @@ public class SwaggerConfiguration { .enable(!haloProperties.getDocDisabled()); } + @Bean + public Docket haloAdminApi() { + log.debug("Doc disabled: [{}]", haloProperties.getDocDisabled()); + return buildApiDocket("cc.ryanc.halo.admin", + "cc.ryanc.halo.web.controller.admin", + "/api/admin/**") + .enable(!haloProperties.getDocDisabled()); + } + @Bean SecurityConfiguration security() { return SecurityConfigurationBuilder.builder() diff --git a/src/main/java/cc/ryanc/halo/listener/StartedListener.java b/src/main/java/cc/ryanc/halo/listener/StartedListener.java index d2d0afe62..7da4ab939 100644 --- a/src/main/java/cc/ryanc/halo/listener/StartedListener.java +++ b/src/main/java/cc/ryanc/halo/listener/StartedListener.java @@ -1,12 +1,14 @@ package cc.ryanc.halo.listener; import cc.ryanc.halo.config.properties.HaloProperties; +import cc.ryanc.halo.model.enums.BlogProperties; import cc.ryanc.halo.model.support.HaloConst; import cc.ryanc.halo.model.support.Theme; import cc.ryanc.halo.service.OptionService; import cc.ryanc.halo.utils.HaloUtils; import cc.ryanc.halo.utils.ThemeUtils; import cc.ryanc.halo.web.controller.content.base.BaseContentController; +import cc.ryanc.halo.web.controller.support.PageJacksonSerializer; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import freemarker.template.TemplateModelException; @@ -23,6 +25,9 @@ import java.io.FileNotFoundException; import java.nio.charset.Charset; import java.util.List; +import static cc.ryanc.halo.model.support.HaloConst.DEFAULT_THEME_NAME; +import static cc.ryanc.halo.model.support.HaloConst.OPTIONS; + /** *
  *     应用启动完成后所执行的方法
@@ -79,12 +84,8 @@ public class StartedListener implements ApplicationListener {
 
     /**
-     * Convert value to corresponding enum.
+     * Converts value to corresponding enum.
      *
      * @param enumType enum type
      * @param value    database value
@@ -33,9 +34,10 @@ public interface ValueEnum {
     }
 
     /**
-     * Get enum value.
+     * Gets enum value.
      *
      * @return enum value
      */
+    @JsonValue
     T getValue();
 }
diff --git a/src/main/java/cc/ryanc/halo/model/support/HaloConst.java b/src/main/java/cc/ryanc/halo/model/support/HaloConst.java
index ea1308c1f..0196a336f 100644
--- a/src/main/java/cc/ryanc/halo/model/support/HaloConst.java
+++ b/src/main/java/cc/ryanc/halo/model/support/HaloConst.java
@@ -17,6 +17,12 @@ import java.util.Map;
  */
 public class HaloConst {
 
+
+    /**
+     * Default theme name.
+     */
+    public final static String DEFAULT_THEME_NAME = "anatole";
+
     /**
      * version constant
      */
diff --git a/src/main/java/cc/ryanc/halo/service/OptionService.java b/src/main/java/cc/ryanc/halo/service/OptionService.java
index 62bc25f3b..215008847 100755
--- a/src/main/java/cc/ryanc/halo/service/OptionService.java
+++ b/src/main/java/cc/ryanc/halo/service/OptionService.java
@@ -4,8 +4,10 @@ import cc.ryanc.halo.model.entity.Option;
 import cc.ryanc.halo.model.enums.BlogProperties;
 import cc.ryanc.halo.service.base.CrudService;
 import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
 
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * Option service.
@@ -46,8 +48,36 @@ public interface OptionService extends CrudService {
     /**
      * Get option by key
      *
-     * @param key key
-     * @return String
+     * @param key option key must not be blank
+     * @return option value or null
      */
-    String getByKey(String key);
+    @Nullable
+    String getByKeyOfNullable(@NonNull String key);
+
+    /**
+     * Get option by key
+     *
+     * @param key option key must not be blank
+     * @return an optional option value
+     */
+    @NonNull
+    Optional getByKey(@NonNull String key);
+
+    /**
+     * Gets option by blog property.
+     *
+     * @param property blog property must not be null
+     * @return an option value
+     */
+    @Nullable
+    String getByPropertyOfNullable(@NonNull BlogProperties property);
+
+    /**
+     * Gets option by blog property.
+     *
+     * @param property blog property must not be null
+     * @return an optional option value
+     */
+    @NonNull
+    Optional getByProperty(@NonNull BlogProperties property);
 }
diff --git a/src/main/java/cc/ryanc/halo/service/impl/OptionServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/OptionServiceImpl.java
index dfab274b6..791305e6b 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/OptionServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/OptionServiceImpl.java
@@ -12,6 +12,7 @@ import org.springframework.util.Assert;
 import org.springframework.util.CollectionUtils;
 
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * OptionService implementation class
@@ -103,7 +104,26 @@ public class OptionServiceImpl extends AbstractCrudService impl
      * @return String
      */
     @Override
-    public String getByKey(String key) {
-        return optionRepository.findByOptionKey(key).map(Option::getOptionValue).orElse(null);
+    public String getByKeyOfNullable(String key) {
+        return getByKey(key).orElse(null);
+    }
+
+    @Override
+    public Optional getByKey(String key) {
+        Assert.hasText(key, "Option key must not be blank");
+
+        return optionRepository.findByOptionKey(key).map(Option::getOptionValue);
+    }
+
+    @Override
+    public String getByPropertyOfNullable(BlogProperties property) {
+        return getByProperty(property).orElse(null);
+    }
+
+    @Override
+    public Optional getByProperty(BlogProperties property) {
+        Assert.notNull(property, "Blog property must not be null");
+
+        return getByKey(property.getValue());
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/api/PostController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/api/PostController.java
new file mode 100644
index 000000000..310f30b42
--- /dev/null
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/api/PostController.java
@@ -0,0 +1,32 @@
+package cc.ryanc.halo.web.controller.admin.api;
+
+import cc.ryanc.halo.model.dto.post.PostSimpleOutputDTO;
+import cc.ryanc.halo.service.PostService;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Post controller.
+ *
+ * @author johnniang
+ * @date 3/19/19
+ */
+@RestController
+@RequestMapping("/api/admin/posts")
+public class PostController {
+
+    private final PostService postService;
+
+    public PostController(PostService postService) {
+        this.postService = postService;
+    }
+
+    @GetMapping("latest")
+    public Page pageLatest(@RequestParam(name = "top", defaultValue = "10") int top) {
+        return postService.pageLatest(top);
+    }
+
+}
diff --git a/src/main/java/cc/ryanc/halo/web/controller/content/base/BaseContentController.java b/src/main/java/cc/ryanc/halo/web/controller/content/base/BaseContentController.java
index b1b7ff8fe..b0e0497b9 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/content/base/BaseContentController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/content/base/BaseContentController.java
@@ -3,6 +3,8 @@ package cc.ryanc.halo.web.controller.content.base;
 import cc.ryanc.halo.logging.Logger;
 import cn.hutool.core.text.StrBuilder;
 
+import static cc.ryanc.halo.model.support.HaloConst.DEFAULT_THEME_NAME;
+
 /**
  * Content base Controller
  *
@@ -14,7 +16,7 @@ public abstract class BaseContentController {
     /**
      * Default theme
      */
-    public static String THEME = "anatole";
+    public static String THEME = DEFAULT_THEME_NAME;
 
     protected Logger log = Logger.getLogger(getClass());
 
diff --git a/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java b/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java
index 3ef665d91..01b41ae41 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java
@@ -6,6 +6,7 @@ import cc.ryanc.halo.model.support.HaloConst;
 import cc.ryanc.halo.utils.ThemeUtils;
 import cc.ryanc.halo.web.controller.content.base.BaseContentController;
 import cn.hutool.core.text.StrBuilder;
+import cn.hutool.json.JSONObject;
 import org.springframework.boot.web.servlet.error.ErrorController;
 import org.springframework.stereotype.Controller;
 import org.springframework.util.StringUtils;
@@ -48,7 +49,7 @@ public class CommonController implements ErrorController {
 
         final User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY);
 
-        log.error("Error path: [{}], status: [{}]", request.getRequestURI(), statusCode);
+        log.error("Error path: [{}], status: [{}]", getErrorPath(), statusCode);
 
         // Get the exception
         Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
diff --git a/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java b/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java
index 164ea7f81..1fba6a92c 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java
@@ -29,6 +29,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static cc.ryanc.halo.model.support.HaloConst.DEFAULT_THEME_NAME;
 import static cc.ryanc.halo.model.support.HaloConst.OPTIONS;
 
 /**
@@ -42,8 +43,6 @@ import static cc.ryanc.halo.model.support.HaloConst.OPTIONS;
 @RequestMapping("/installations")
 public class InstallController {
 
-    private final static String DEFAULT_THEME_NAME = "anatole";
-
     private final UserService userService;
 
     private final CategoryService categoryService;