mirror of https://github.com/halo-dev/halo
Refactor HaloUtils
parent
1ddb1043d4
commit
2b7753bccf
|
@ -36,7 +36,7 @@ public class Comment extends BaseEntity {
|
||||||
/**
|
/**
|
||||||
* 评论者邮箱
|
* 评论者邮箱
|
||||||
*/
|
*/
|
||||||
@Column(name = "email", columnDefinition = "varchar(50) default ''")
|
@Column(name = "email", columnDefinition = "varchar(255) default ''")
|
||||||
private String email;
|
private String email;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,6 +7,7 @@ import org.hibernate.annotations.SQLDelete;
|
||||||
import org.hibernate.annotations.Where;
|
import org.hibernate.annotations.Where;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setting entity.
|
* Setting entity.
|
||||||
|
@ -20,6 +21,7 @@ import javax.persistence.*;
|
||||||
@Data
|
@Data
|
||||||
@ToString
|
@ToString
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
public class Option extends BaseEntity {
|
public class Option extends BaseEntity {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
|
@ -44,6 +46,11 @@ public class Option extends BaseEntity {
|
||||||
@Column(name = "option_source", columnDefinition = "varchar(127) default 'system'")
|
@Column(name = "option_source", columnDefinition = "varchar(127) default 'system'")
|
||||||
private String optionSource;
|
private String optionSource;
|
||||||
|
|
||||||
|
public Option(String optionKey, String optionValue) {
|
||||||
|
this.optionKey = optionKey;
|
||||||
|
this.optionValue = optionValue;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prePersist() {
|
public void prePersist() {
|
||||||
super.prePersist();
|
super.prePersist();
|
||||||
|
|
|
@ -149,7 +149,13 @@ public enum BlogProperties implements ValueEnum<String> {
|
||||||
/**
|
/**
|
||||||
* 附件存储位置
|
* 附件存储位置
|
||||||
*/
|
*/
|
||||||
ATTACH_LOC("attach_loc");
|
ATTACH_LOC("attach_loc"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 七牛云 Zone.
|
||||||
|
*/
|
||||||
|
QINIU_ZONE("qiniu_zone");
|
||||||
|
|
||||||
|
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
package cc.ryanc.halo.model.params;
|
||||||
|
|
||||||
|
import cc.ryanc.halo.model.dto.base.InputConverter;
|
||||||
|
import cc.ryanc.halo.model.entity.Comment;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Email;
|
||||||
|
import javax.validation.constraints.Min;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.Size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author johnniang
|
||||||
|
* @date 3/22/19
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CommentParam implements InputConverter<Comment> {
|
||||||
|
|
||||||
|
@NotBlank(message = "Comment author name must not be blank")
|
||||||
|
@Size(max = 50, message = "Length of comment author name must not be more than {max}")
|
||||||
|
private String author;
|
||||||
|
|
||||||
|
@NotBlank(message = "Comment email must not be blank")
|
||||||
|
@Email(message = "Comment email's format is incorrect")
|
||||||
|
@Size(max = 255, message = "Length of comment email must not be more than {max}")
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
@Size(max = 127, message = "Length of comment author url must not be more than {max}")
|
||||||
|
private String authorUrl;
|
||||||
|
|
||||||
|
@NotBlank(message = "Comment content must not be blank")
|
||||||
|
@Size(max = 1023, message = "Length of comment content must not be more than {max}")
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
@Size(max = 512, message = "Length of comment user agent must not be more than {max}")
|
||||||
|
private String userAgent;
|
||||||
|
|
||||||
|
@Min(value = 1, message = "Post id must not be less than {value}")
|
||||||
|
private Integer postId;
|
||||||
|
|
||||||
|
@Min(value = 0, message = "Comment parent id must not be less than {value}")
|
||||||
|
private Long parentId = 0L;
|
||||||
|
|
||||||
|
}
|
|
@ -36,6 +36,7 @@ public class HaloConst {
|
||||||
/**
|
/**
|
||||||
* All of the options
|
* All of the options
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public final static ConcurrentMap<String, String> OPTIONS = new ConcurrentHashMap<>();
|
public final static ConcurrentMap<String, String> OPTIONS = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -5,6 +5,7 @@ import cc.ryanc.halo.model.entity.Option;
|
||||||
import cc.ryanc.halo.model.enums.BlogProperties;
|
import cc.ryanc.halo.model.enums.BlogProperties;
|
||||||
import cc.ryanc.halo.model.params.OptionParam;
|
import cc.ryanc.halo.model.params.OptionParam;
|
||||||
import cc.ryanc.halo.service.base.CrudService;
|
import cc.ryanc.halo.service.base.CrudService;
|
||||||
|
import com.qiniu.common.Zone;
|
||||||
import org.springframework.lang.NonNull;
|
import org.springframework.lang.NonNull;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
|
@ -19,6 +20,10 @@ import java.util.Optional;
|
||||||
*/
|
*/
|
||||||
public interface OptionService extends CrudService<Option, Integer> {
|
public interface OptionService extends CrudService<Option, Integer> {
|
||||||
|
|
||||||
|
int DEFAULT_POST_PAGE_SIZE = 10;
|
||||||
|
|
||||||
|
int DEFAULT_COMMENT_PAGE_SIZE = 10;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save one option
|
* Save one option
|
||||||
*
|
*
|
||||||
|
@ -101,4 +106,27 @@ public interface OptionService extends CrudService<Option, Integer> {
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
Optional<String> getByProperty(@NonNull BlogProperties property);
|
Optional<String> getByProperty(@NonNull BlogProperties property);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets post page size.
|
||||||
|
*
|
||||||
|
* @return page size
|
||||||
|
*/
|
||||||
|
int getPostPageSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets comment page size.
|
||||||
|
*
|
||||||
|
* @return page size
|
||||||
|
*/
|
||||||
|
int getCommentPageSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get quniu zone.
|
||||||
|
*
|
||||||
|
* @return qiniu zone
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
Zone getQiniuZone();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@ import cc.ryanc.halo.repository.OptionRepository;
|
||||||
import cc.ryanc.halo.service.OptionService;
|
import cc.ryanc.halo.service.OptionService;
|
||||||
import cc.ryanc.halo.service.base.AbstractCrudService;
|
import cc.ryanc.halo.service.base.AbstractCrudService;
|
||||||
import cc.ryanc.halo.utils.ServiceUtils;
|
import cc.ryanc.halo.utils.ServiceUtils;
|
||||||
|
import com.qiniu.common.Zone;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
@ -24,6 +26,7 @@ import java.util.stream.Collectors;
|
||||||
* @author : RYAN0UP
|
* @author : RYAN0UP
|
||||||
* @date : 2019-03-14
|
* @date : 2019-03-14
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class OptionServiceImpl extends AbstractCrudService<Option, Integer> implements OptionService {
|
public class OptionServiceImpl extends AbstractCrudService<Option, Integer> implements OptionService {
|
||||||
|
|
||||||
|
@ -148,4 +151,56 @@ public class OptionServiceImpl extends AbstractCrudService<Option, Integer> impl
|
||||||
|
|
||||||
return getByKey(property.getValue());
|
return getByKey(property.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPostPageSize() {
|
||||||
|
try {
|
||||||
|
return getByProperty(BlogProperties.INDEX_POSTS).map(Integer::valueOf).orElse(DEFAULT_POST_PAGE_SIZE);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
log.error(BlogProperties.INDEX_POSTS + " option was not a number format", e);
|
||||||
|
return DEFAULT_POST_PAGE_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCommentPageSize() {
|
||||||
|
try {
|
||||||
|
return getByProperty(BlogProperties.INDEX_COMMENTS).map(Integer::valueOf).orElse(DEFAULT_COMMENT_PAGE_SIZE);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
log.error(BlogProperties.INDEX_COMMENTS + " option was not a number format", e);
|
||||||
|
return DEFAULT_COMMENT_PAGE_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Zone getQiniuZone() {
|
||||||
|
return getByProperty(BlogProperties.QINIU_ZONE).map(qiniuZone -> {
|
||||||
|
|
||||||
|
Zone zone;
|
||||||
|
switch (qiniuZone) {
|
||||||
|
case "z0":
|
||||||
|
zone = Zone.zone0();
|
||||||
|
break;
|
||||||
|
case "z1":
|
||||||
|
zone = Zone.zone1();
|
||||||
|
break;
|
||||||
|
case "z2":
|
||||||
|
zone = Zone.zone2();
|
||||||
|
break;
|
||||||
|
case "na0":
|
||||||
|
zone = Zone.zoneNa0();
|
||||||
|
break;
|
||||||
|
case "as0":
|
||||||
|
zone = Zone.zoneAs0();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Default is detecting zone automatically
|
||||||
|
zone = Zone.autoZone();
|
||||||
|
}
|
||||||
|
return zone;
|
||||||
|
|
||||||
|
}).orElseGet(Zone::autoZone);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
package cc.ryanc.halo.utils;
|
package cc.ryanc.halo.utils;
|
||||||
|
|
||||||
import cc.ryanc.halo.model.enums.BlogProperties;
|
|
||||||
import cn.hutool.core.text.StrBuilder;
|
import cn.hutool.core.text.StrBuilder;
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.qiniu.common.Zone;
|
|
||||||
import io.github.biezhi.ome.OhMyEmail;
|
import io.github.biezhi.ome.OhMyEmail;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
@ -28,8 +25,6 @@ import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import static cc.ryanc.halo.model.support.HaloConst.OPTIONS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <pre>
|
* <pre>
|
||||||
* 常用工具
|
* 常用工具
|
||||||
|
@ -89,59 +84,6 @@ public class HaloUtils {
|
||||||
return machineAddress.getHostAddress();
|
return machineAddress.getHostAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets default page size.
|
|
||||||
*
|
|
||||||
* @return default page size
|
|
||||||
*/
|
|
||||||
public static int getDefaultPageSize(int pageSize) {
|
|
||||||
if (StrUtil.isNotBlank(OPTIONS.get(BlogProperties.INDEX_POSTS))) {
|
|
||||||
return Integer.parseInt(OPTIONS.get(BlogProperties.INDEX_POSTS));
|
|
||||||
}
|
|
||||||
|
|
||||||
return pageSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets default qiniuyun zone.
|
|
||||||
*
|
|
||||||
* @return qiniuyun zone
|
|
||||||
*/
|
|
||||||
@NonNull
|
|
||||||
public static Zone getDefaultQiniuZone() {
|
|
||||||
// Get zone from setting
|
|
||||||
String qiniuZone = OPTIONS.get("qiniu_zone");
|
|
||||||
|
|
||||||
if (StrUtil.isBlank(qiniuZone)) {
|
|
||||||
return Zone.autoZone();
|
|
||||||
}
|
|
||||||
|
|
||||||
Zone zone;
|
|
||||||
|
|
||||||
switch (qiniuZone) {
|
|
||||||
case "z0":
|
|
||||||
zone = Zone.zone0();
|
|
||||||
break;
|
|
||||||
case "z1":
|
|
||||||
zone = Zone.zone1();
|
|
||||||
break;
|
|
||||||
case "z2":
|
|
||||||
zone = Zone.zone2();
|
|
||||||
break;
|
|
||||||
case "na0":
|
|
||||||
zone = Zone.zoneNa0();
|
|
||||||
break;
|
|
||||||
case "as0":
|
|
||||||
zone = Zone.zoneAs0();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// Default is detecting zone automatically
|
|
||||||
zone = Zone.autoZone();
|
|
||||||
}
|
|
||||||
|
|
||||||
return zone;
|
|
||||||
}
|
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
// * 获取备份文件信息
|
// * 获取备份文件信息
|
||||||
// *
|
// *
|
||||||
|
|
|
@ -1,14 +1,25 @@
|
||||||
package cc.ryanc.halo.web.controller.admin.api;
|
package cc.ryanc.halo.web.controller.admin.api;
|
||||||
|
|
||||||
|
import cc.ryanc.halo.model.dto.CommentOutputDTO;
|
||||||
|
import cc.ryanc.halo.model.entity.Comment;
|
||||||
|
import cc.ryanc.halo.model.enums.BlogProperties;
|
||||||
import cc.ryanc.halo.model.enums.CommentStatus;
|
import cc.ryanc.halo.model.enums.CommentStatus;
|
||||||
|
import cc.ryanc.halo.model.params.CommentParam;
|
||||||
|
import cc.ryanc.halo.model.support.HaloConst;
|
||||||
import cc.ryanc.halo.model.vo.CommentVO;
|
import cc.ryanc.halo.model.vo.CommentVO;
|
||||||
import cc.ryanc.halo.service.CommentService;
|
import cc.ryanc.halo.service.CommentService;
|
||||||
|
import cc.ryanc.halo.utils.HaloUtils;
|
||||||
|
import cn.hutool.crypto.SecureUtil;
|
||||||
|
import cn.hutool.extra.servlet.ServletUtil;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.web.PageableDefault;
|
import org.springframework.data.web.PageableDefault;
|
||||||
|
import org.springframework.web.bind.ServletRequestUtils;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.springframework.data.domain.Sort.Direction.DESC;
|
import static org.springframework.data.domain.Sort.Direction.DESC;
|
||||||
|
@ -40,4 +51,17 @@ public class CommentController {
|
||||||
@PathVariable("status") CommentStatus status) {
|
@PathVariable("status") CommentStatus status) {
|
||||||
return commentService.pageBy(status, pageable);
|
return commentService.pageBy(status, pageable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public CommentOutputDTO createBy(@Valid @RequestBody CommentParam commentParam, HttpServletRequest request) {
|
||||||
|
Comment comment = commentParam.convertTo();
|
||||||
|
|
||||||
|
// Set some default value
|
||||||
|
comment.setGavatarMd5(SecureUtil.md5(comment.getEmail()));
|
||||||
|
comment.setIpAddress(ServletUtil.getClientIP(request));
|
||||||
|
|
||||||
|
|
||||||
|
// commentService.createBy(comment)
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,11 @@ import cc.ryanc.halo.model.entity.Post;
|
||||||
import cc.ryanc.halo.model.enums.BlogProperties;
|
import cc.ryanc.halo.model.enums.BlogProperties;
|
||||||
import cc.ryanc.halo.model.enums.PostStatus;
|
import cc.ryanc.halo.model.enums.PostStatus;
|
||||||
import cc.ryanc.halo.model.enums.PostType;
|
import cc.ryanc.halo.model.enums.PostType;
|
||||||
|
import cc.ryanc.halo.service.OptionService;
|
||||||
import cc.ryanc.halo.service.PostService;
|
import cc.ryanc.halo.service.PostService;
|
||||||
import cc.ryanc.halo.utils.HaloUtils;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import freemarker.template.Template;
|
import freemarker.template.Template;
|
||||||
import freemarker.template.TemplateException;
|
import freemarker.template.TemplateException;
|
||||||
import javafx.geometry.Pos;
|
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
|
@ -35,10 +34,15 @@ public class ContentFeedController {
|
||||||
|
|
||||||
private final PostService postService;
|
private final PostService postService;
|
||||||
|
|
||||||
|
private final OptionService optionService;
|
||||||
|
|
||||||
private final FreeMarkerConfigurer freeMarker;
|
private final FreeMarkerConfigurer freeMarker;
|
||||||
|
|
||||||
public ContentFeedController(PostService postService, FreeMarkerConfigurer freeMarker) {
|
public ContentFeedController(PostService postService,
|
||||||
|
OptionService optionService,
|
||||||
|
FreeMarkerConfigurer freeMarker) {
|
||||||
this.postService = postService;
|
this.postService = postService;
|
||||||
|
this.optionService = optionService;
|
||||||
this.freeMarker = freeMarker;
|
this.freeMarker = freeMarker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +79,7 @@ public class ContentFeedController {
|
||||||
@GetMapping(value = {"atom", "atom.xml"}, produces = "application/xml;charset=UTF-8")
|
@GetMapping(value = {"atom", "atom.xml"}, produces = "application/xml;charset=UTF-8")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public String atom(Model model) throws IOException, TemplateException {
|
public String atom(Model model) throws IOException, TemplateException {
|
||||||
int pageSize = HaloUtils.getDefaultPageSize(10);
|
int pageSize = optionService.getPostPageSize();
|
||||||
final Sort sort = new Sort(Sort.Direction.DESC, "createTime");
|
final Sort sort = new Sort(Sort.Direction.DESC, "createTime");
|
||||||
final Pageable pageable = PageRequest.of(0, pageSize, sort);
|
final Pageable pageable = PageRequest.of(0, pageSize, sort);
|
||||||
model.addAttribute("posts", buildPosts(pageable));
|
model.addAttribute("posts", buildPosts(pageable));
|
||||||
|
@ -128,10 +132,11 @@ public class ContentFeedController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build posts for feed
|
* Build posts for feed
|
||||||
|
*
|
||||||
* @param pageable pageable
|
* @param pageable pageable
|
||||||
* @return List<Post>
|
* @return List<Post>
|
||||||
*/
|
*/
|
||||||
private List<Post> buildPosts(Pageable pageable){
|
private List<Post> buildPosts(Pageable pageable) {
|
||||||
final Page<Post> postsPage = postService.pageBy(PostStatus.PUBLISHED, PostType.POST, pageable).map(post -> {
|
final Page<Post> postsPage = postService.pageBy(PostStatus.PUBLISHED, PostType.POST, pageable).map(post -> {
|
||||||
if (StrUtil.isNotEmpty(post.getPassword())) {
|
if (StrUtil.isNotEmpty(post.getPassword())) {
|
||||||
post.setFormatContent("该文章为加密文章");
|
post.setFormatContent("该文章为加密文章");
|
||||||
|
|
|
@ -3,8 +3,8 @@ package cc.ryanc.halo.web.controller.content;
|
||||||
import cc.ryanc.halo.model.enums.PostStatus;
|
import cc.ryanc.halo.model.enums.PostStatus;
|
||||||
import cc.ryanc.halo.model.enums.PostType;
|
import cc.ryanc.halo.model.enums.PostType;
|
||||||
import cc.ryanc.halo.model.vo.PostListVO;
|
import cc.ryanc.halo.model.vo.PostListVO;
|
||||||
|
import cc.ryanc.halo.service.OptionService;
|
||||||
import cc.ryanc.halo.service.PostService;
|
import cc.ryanc.halo.service.PostService;
|
||||||
import cc.ryanc.halo.utils.HaloUtils;
|
|
||||||
import cc.ryanc.halo.web.controller.content.base.BaseContentController;
|
import cc.ryanc.halo.web.controller.content.base.BaseContentController;
|
||||||
import cn.hutool.core.util.PageUtil;
|
import cn.hutool.core.util.PageUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
@ -34,8 +34,12 @@ public class ContentIndexController extends BaseContentController {
|
||||||
|
|
||||||
private final PostService postService;
|
private final PostService postService;
|
||||||
|
|
||||||
public ContentIndexController(PostService postService) {
|
private final OptionService optionService;
|
||||||
|
|
||||||
|
public ContentIndexController(PostService postService,
|
||||||
|
OptionService optionService) {
|
||||||
this.postService = postService;
|
this.postService = postService;
|
||||||
|
this.optionService = optionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,7 +69,7 @@ public class ContentIndexController extends BaseContentController {
|
||||||
@SortDefault(sort = "createTime", direction = DESC)
|
@SortDefault(sort = "createTime", direction = DESC)
|
||||||
}) Sort sort) {
|
}) Sort sort) {
|
||||||
log.debug("Requested index page, sort info: [{}]", sort);
|
log.debug("Requested index page, sort info: [{}]", sort);
|
||||||
int pageSize = HaloUtils.getDefaultPageSize(10);
|
int pageSize = optionService.getPostPageSize();
|
||||||
Pageable pageable = PageRequest.of(page - 1, pageSize, sort);
|
Pageable pageable = PageRequest.of(page - 1, pageSize, sort);
|
||||||
Page<PostListVO> posts = postService.pageListVoBy(PostStatus.PUBLISHED, PostType.POST, pageable);
|
Page<PostListVO> posts = postService.pageListVoBy(PostStatus.PUBLISHED, PostType.POST, pageable);
|
||||||
int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3);
|
int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3);
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
package cc.ryanc.halo.web.controller.content;
|
package cc.ryanc.halo.web.controller.content;
|
||||||
|
|
||||||
import cc.ryanc.halo.model.entity.Tag;
|
import cc.ryanc.halo.model.entity.Tag;
|
||||||
import cc.ryanc.halo.model.enums.BlogProperties;
|
|
||||||
import cc.ryanc.halo.model.vo.PostListVO;
|
import cc.ryanc.halo.model.vo.PostListVO;
|
||||||
|
import cc.ryanc.halo.service.OptionService;
|
||||||
import cc.ryanc.halo.service.PostService;
|
import cc.ryanc.halo.service.PostService;
|
||||||
import cc.ryanc.halo.service.TagService;
|
import cc.ryanc.halo.service.TagService;
|
||||||
import cc.ryanc.halo.utils.HaloUtils;
|
|
||||||
import cc.ryanc.halo.web.controller.content.base.BaseContentController;
|
import cc.ryanc.halo.web.controller.content.base.BaseContentController;
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
|
@ -19,7 +17,6 @@ import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
import static cc.ryanc.halo.model.support.HaloConst.OPTIONS;
|
|
||||||
import static org.springframework.data.domain.Sort.Direction.DESC;
|
import static org.springframework.data.domain.Sort.Direction.DESC;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,9 +33,14 @@ public class ContentTagController extends BaseContentController {
|
||||||
|
|
||||||
private final PostService postService;
|
private final PostService postService;
|
||||||
|
|
||||||
public ContentTagController(TagService tagService, PostService postService) {
|
private final OptionService optionService;
|
||||||
|
|
||||||
|
public ContentTagController(TagService tagService,
|
||||||
|
PostService postService,
|
||||||
|
OptionService optionService) {
|
||||||
this.tagService = tagService;
|
this.tagService = tagService;
|
||||||
this.postService = postService;
|
this.postService = postService;
|
||||||
|
this.optionService = optionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -81,7 +83,7 @@ public class ContentTagController extends BaseContentController {
|
||||||
if (null == tag) {
|
if (null == tag) {
|
||||||
return this.renderNotFound();
|
return this.renderNotFound();
|
||||||
}
|
}
|
||||||
int size = HaloUtils.getDefaultPageSize(10);
|
int size = optionService.getPostPageSize();
|
||||||
final Pageable pageable = PageRequest.of(page - 1, size, sort);
|
final Pageable pageable = PageRequest.of(page - 1, size, sort);
|
||||||
|
|
||||||
// TODO get posts by tag
|
// TODO get posts by tag
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
package cc.ryanc.halo.service.impl;
|
||||||
|
|
||||||
|
import cc.ryanc.halo.model.entity.Option;
|
||||||
|
import cc.ryanc.halo.model.enums.BlogProperties;
|
||||||
|
import cc.ryanc.halo.repository.OptionRepository;
|
||||||
|
import com.qiniu.common.Zone;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.mockito.BDDMockito.given;
|
||||||
|
import static org.mockito.BDDMockito.then;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OptionService test.
|
||||||
|
*
|
||||||
|
* @author johnniang
|
||||||
|
* @date 3/22/19
|
||||||
|
*/
|
||||||
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
|
public class OptionServiceImplTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private OptionRepository optionRepository;
|
||||||
|
|
||||||
|
@InjectMocks
|
||||||
|
private OptionServiceImpl optionService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getQiniuAutoZoneTest() {
|
||||||
|
getQiniuZoneTest("", Zone.autoZone());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getQiniuAutoZoneOfNullOptionTest() {
|
||||||
|
getQiniuZoneTest(Zone.autoZone(), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getQiniuZ0ZoneTest() {
|
||||||
|
getQiniuZoneTest("z0", Zone.zone0());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getQiniuZ1ZoneTest() {
|
||||||
|
getQiniuZoneTest("z1", Zone.zone1());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getQiniuZ2ZoneTest() {
|
||||||
|
getQiniuZoneTest("z2", Zone.zone2());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getQiniuAs0ZoneTest() {
|
||||||
|
getQiniuZoneTest("as0", Zone.zoneAs0());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getQiniuNa0ZoneTest() {
|
||||||
|
getQiniuZoneTest("na0", Zone.zoneNa0());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getQiniuZoneTest(String region, Zone actualZone) {
|
||||||
|
getQiniuZoneTest(actualZone, new Option("", region));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getQiniuZoneTest(Zone actualZone, Option option) {
|
||||||
|
BlogProperties zoneProperty = BlogProperties.QINIU_ZONE;
|
||||||
|
|
||||||
|
// Given
|
||||||
|
given(optionRepository.findByOptionKey(zoneProperty.getValue())).willReturn(Optional.ofNullable(option));
|
||||||
|
|
||||||
|
// When
|
||||||
|
Zone zone = optionService.getQiniuZone();
|
||||||
|
|
||||||
|
// Then
|
||||||
|
then(optionRepository).should().findByOptionKey(zoneProperty.getValue());
|
||||||
|
|
||||||
|
assertNotNull(zone);
|
||||||
|
assertThat(zone.getRegion(), equalTo(actualZone.getRegion()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,65 +0,0 @@
|
||||||
package cc.ryanc.halo.utils;
|
|
||||||
|
|
||||||
import cc.ryanc.halo.model.support.HaloConst;
|
|
||||||
import com.qiniu.common.Zone;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HaloUtils test.
|
|
||||||
*
|
|
||||||
* @author johnniang
|
|
||||||
*/
|
|
||||||
public class HaloUtilsTest {
|
|
||||||
|
|
||||||
// @Test
|
|
||||||
// public void getDefaultPageSizeTest() {
|
|
||||||
// // Get page size
|
|
||||||
// int pageSize = HaloUtils.getDefaultPageSize();
|
|
||||||
// assertEquals(HaloUtils.DEFAULT_PAGE_SIZE, pageSize);
|
|
||||||
//
|
|
||||||
// // Cover the default page size
|
|
||||||
// HaloConst.OPTIONS.put(BlogPropertiesEnum.INDEX_POSTS.getProp(), String.valueOf(5));
|
|
||||||
//
|
|
||||||
// // Get page size again
|
|
||||||
// pageSize = HaloUtils.getDefaultPageSize();
|
|
||||||
// assertEquals(5, pageSize);
|
|
||||||
// }
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getDefaultQiniuZoneTest() {
|
|
||||||
Zone zone = HaloUtils.getDefaultQiniuZone();
|
|
||||||
assertEquals(Zone.autoZone().getRegion(), zone.getRegion());
|
|
||||||
|
|
||||||
// Set zone manually
|
|
||||||
HaloConst.OPTIONS.put("qiniu_zone", "z0");
|
|
||||||
// Set zone manually
|
|
||||||
zone = HaloUtils.getDefaultQiniuZone();
|
|
||||||
assertEquals(Zone.zone0().getRegion(), zone.getRegion());
|
|
||||||
|
|
||||||
// Set zone manually
|
|
||||||
HaloConst.OPTIONS.put("qiniu_zone", "z1");
|
|
||||||
// Set zone manually
|
|
||||||
zone = HaloUtils.getDefaultQiniuZone();
|
|
||||||
assertEquals(Zone.zone1().getRegion(), zone.getRegion());
|
|
||||||
|
|
||||||
// Set zone manually
|
|
||||||
HaloConst.OPTIONS.put("qiniu_zone", "z2");
|
|
||||||
// Set zone manually
|
|
||||||
zone = HaloUtils.getDefaultQiniuZone();
|
|
||||||
assertEquals(Zone.zone2().getRegion(), zone.getRegion());
|
|
||||||
|
|
||||||
// Set zone manually
|
|
||||||
HaloConst.OPTIONS.put("qiniu_zone", "na0");
|
|
||||||
// Set zone manually
|
|
||||||
zone = HaloUtils.getDefaultQiniuZone();
|
|
||||||
assertEquals(Zone.zoneNa0().getRegion(), zone.getRegion());
|
|
||||||
|
|
||||||
// Set zone manually
|
|
||||||
HaloConst.OPTIONS.put("qiniu_zone", "as0");
|
|
||||||
// Set zone manually
|
|
||||||
zone = HaloUtils.getDefaultQiniuZone();
|
|
||||||
assertEquals(Zone.zoneAs0().getRegion(), zone.getRegion());
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue