diff --git a/src/main/java/run/halo/app/model/dto/post/PostSimpleOutputDTO.java b/src/main/java/run/halo/app/model/dto/post/PostSimpleOutputDTO.java index 559ea22b1..e776d0a70 100644 --- a/src/main/java/run/halo/app/model/dto/post/PostSimpleOutputDTO.java +++ b/src/main/java/run/halo/app/model/dto/post/PostSimpleOutputDTO.java @@ -24,15 +24,15 @@ public class PostSimpleOutputDTO extends PostMinimalOutputDTO { private String thumbnail; - private Long visits; + private Long visits = 0L; private Boolean disallowComment; private String template; - private Integer topPriority; + private Integer topPriority = 0; private PostCreateFrom createFrom; - private Long likes; + private Long likes = 0L; } diff --git a/src/main/java/run/halo/app/service/PostService.java b/src/main/java/run/halo/app/service/PostService.java index 245c38b14..593e95cfe 100755 --- a/src/main/java/run/halo/app/service/PostService.java +++ b/src/main/java/run/halo/app/service/PostService.java @@ -183,5 +183,14 @@ public interface PostService extends CrudService { * @return a page of post simple output dto */ @NonNull - Page convertTo(@NonNull Page postPage); + Page convertToSimpleDto(@NonNull Page postPage); + + /** + * Converts to a page of post list vo. + * + * @param postPage post page must not be null + * @return a page of post list vo + */ + @NonNull + Page convertToListVo(@NonNull Page postPage); } diff --git a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java index c2cedb1fa..fbfb9a523 100644 --- a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java @@ -116,6 +116,13 @@ public class PostServiceImpl extends AbstractCrudService implemen return postRepository.findAll(buildSpecByQuery(postQuery), pageable); } + /** + * Build specification by post query. + * + * @param postQuery post query must not be null + * @return a post specification + */ + @NonNull private Specification buildSpecByQuery(@NonNull PostQuery postQuery) { Assert.notNull(postQuery, "Post query must not be null"); @@ -167,44 +174,7 @@ public class PostServiceImpl extends AbstractCrudService implemen public Page pageListVoBy(PostStatus status, Pageable pageable) { Page postPage = pageBy(status, pageable); - List posts = postPage.getContent(); - - Set postIds = ServiceUtils.fetchProperty(posts, Post::getId); - - // Get tag list map - Map> tagListMap = postTagService.listTagListMapBy(postIds); - - // Get category list map - Map> categoryListMap = postCategoryService.listCategoryListMap(postIds); - - // Get comment count - Map commentCountMap = commentService.countByPostIds(postIds); - - - return postPage.map(post -> { - PostListVO postListVO = new PostListVO().convertFrom(post); - - Optional.ofNullable(tagListMap.get(post.getId())).orElseGet(LinkedList::new); - - // Set tags - postListVO.setTags(Optional.ofNullable(tagListMap.get(post.getId())) - .orElseGet(LinkedList::new) - .stream() - .map(tag -> new TagOutputDTO().convertFrom(tag)) - .collect(Collectors.toList())); - - // Set categories - postListVO.setCategories(Optional.ofNullable(categoryListMap.get(post.getId())) - .orElseGet(LinkedList::new) - .stream() - .map(category -> new CategoryOutputDTO().convertFrom(category)) - .collect(Collectors.toList())); - - // Set comment count - postListVO.setCommentCount(commentCountMap.getOrDefault(post.getId(), 0L)); - - return postListVO; - }); + return convertToListVo(postPage); } /** @@ -393,6 +363,58 @@ public class PostServiceImpl extends AbstractCrudService implemen return super.removeById(postId); } + + @Override + public Page convertToSimpleDto(@NonNull Page postPage) { + Assert.notNull(postPage, "Post page must not be null"); + + return postPage.map(post -> new PostSimpleOutputDTO().convertFrom(post)); + } + + @Override + public Page convertToListVo(Page postPage) { + Assert.notNull(postPage, "Post page must not be null"); + + List posts = postPage.getContent(); + + Set postIds = ServiceUtils.fetchProperty(posts, Post::getId); + + // Get tag list map + Map> tagListMap = postTagService.listTagListMapBy(postIds); + + // Get category list map + Map> categoryListMap = postCategoryService.listCategoryListMap(postIds); + + // Get comment count + Map commentCountMap = commentService.countByPostIds(postIds); + + + return postPage.map(post -> { + PostListVO postListVO = new PostListVO().convertFrom(post); + + Optional.ofNullable(tagListMap.get(post.getId())).orElseGet(LinkedList::new); + + // Set tags + postListVO.setTags(Optional.ofNullable(tagListMap.get(post.getId())) + .orElseGet(LinkedList::new) + .stream() + .map(tag -> new TagOutputDTO().convertFrom(tag)) + .collect(Collectors.toList())); + + // Set categories + postListVO.setCategories(Optional.ofNullable(categoryListMap.get(post.getId())) + .orElseGet(LinkedList::new) + .stream() + .map(category -> new CategoryOutputDTO().convertFrom(category)) + .collect(Collectors.toList())); + + // Set comment count + postListVO.setCommentCount(commentCountMap.getOrDefault(post.getId(), 0L)); + + return postListVO; + }); + } + /** * Converts to post minimal output dto. * @@ -411,13 +433,6 @@ public class PostServiceImpl extends AbstractCrudService implemen .collect(Collectors.toList()); } - @Override - public Page convertTo(@NonNull Page postPage) { - Assert.notNull(postPage, "Post page must not be null"); - - return postPage.map(post -> new PostSimpleOutputDTO().convertFrom(post)); - } - /** * Converts to post detail vo. * diff --git a/src/main/java/run/halo/app/web/controller/admin/api/PostController.java b/src/main/java/run/halo/app/web/controller/admin/api/PostController.java index 0a891c5c6..2f1ca30dd 100644 --- a/src/main/java/run/halo/app/web/controller/admin/api/PostController.java +++ b/src/main/java/run/halo/app/web/controller/admin/api/PostController.java @@ -12,6 +12,7 @@ import run.halo.app.model.enums.PostStatus; import run.halo.app.model.params.PostParam; import run.halo.app.model.params.PostQuery; import run.halo.app.model.vo.PostDetailVO; +import run.halo.app.model.vo.PostListVO; import run.halo.app.service.*; import javax.validation.Valid; @@ -53,10 +54,10 @@ public class PostController { @GetMapping @ApiOperation("Lists posts") - public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable, - PostQuery postQuery) { + public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable, + PostQuery postQuery) { Page postPage = postService.pageBy(postQuery, pageable); - return postService.convertTo(postPage); + return postService.convertToListVo(postPage); } @GetMapping("latest")