mirror of https://github.com/halo-dev/halo
Add PostController
parent
4a6df0bf64
commit
7898b777db
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 应用启动完成后所执行的方法
|
||||
|
@ -79,12 +84,8 @@ public class StartedListener implements ApplicationListener<ApplicationStartedEv
|
|||
* Get active theme
|
||||
*/
|
||||
private void getActiveTheme() {
|
||||
final String themeValue = optionService.getByKey("theme");
|
||||
if (StrUtil.isNotEmpty(themeValue) && !StrUtil.equals(themeValue, null)) {
|
||||
BaseContentController.THEME = themeValue;
|
||||
} else {
|
||||
BaseContentController.THEME = "anatole";
|
||||
}
|
||||
BaseContentController.THEME = optionService.getByProperty(BlogProperties.THEME).orElse(DEFAULT_THEME_NAME);
|
||||
|
||||
try {
|
||||
configuration.setSharedVariable("themeName", BaseContentController.THEME);
|
||||
} catch (TemplateModelException e) {
|
||||
|
@ -114,7 +115,7 @@ public class StartedListener implements ApplicationListener<ApplicationStartedEv
|
|||
// Get server port
|
||||
String serverPort = applicationContext.getEnvironment().getProperty("server.port");
|
||||
|
||||
String blogUrl = null;
|
||||
String blogUrl = OPTIONS.get(BlogProperties.BLOG_URL);
|
||||
|
||||
if (StrUtil.isNotBlank(blogUrl)) {
|
||||
blogUrl = StrUtil.removeSuffix(blogUrl, "/");
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package cc.ryanc.halo.model.enums;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonValue;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
@ -13,7 +14,7 @@ import java.util.stream.Stream;
|
|||
public interface ValueEnum<T> {
|
||||
|
||||
/**
|
||||
* 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<T> {
|
|||
}
|
||||
|
||||
/**
|
||||
* Get enum value.
|
||||
* Gets enum value.
|
||||
*
|
||||
* @return enum value
|
||||
*/
|
||||
@JsonValue
|
||||
T getValue();
|
||||
}
|
||||
|
|
|
@ -17,6 +17,12 @@ import java.util.Map;
|
|||
*/
|
||||
public class HaloConst {
|
||||
|
||||
|
||||
/**
|
||||
* Default theme name.
|
||||
*/
|
||||
public final static String DEFAULT_THEME_NAME = "anatole";
|
||||
|
||||
/**
|
||||
* version constant
|
||||
*/
|
||||
|
|
|
@ -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<Option, Integer> {
|
|||
/**
|
||||
* 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<String> 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<String> getByProperty(@NonNull BlogProperties property);
|
||||
}
|
||||
|
|
|
@ -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<Option, Integer> 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<String> 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<String> getByProperty(BlogProperties property) {
|
||||
Assert.notNull(property, "Blog property must not be null");
|
||||
|
||||
return getByKey(property.getValue());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<PostSimpleOutputDTO> pageLatest(@RequestParam(name = "top", defaultValue = "10") int top) {
|
||||
return postService.pageLatest(top);
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue