From 64397753be01fbf1035815a1d2ae742d8d6cf7e5 Mon Sep 17 00:00:00 2001 From: johnniang Date: Thu, 25 Apr 2019 22:02:40 +0800 Subject: [PATCH] Refactor post service and controller --- .../controller/admin/api/PostController.java | 44 ++++++------ .../controller/admin/api/SheetController.java | 4 +- .../content/ContentArchiveController.java | 8 ++- .../content/ContentIndexController.java | 5 +- .../content/api/PostController.java | 26 +++---- .../app/model/dto/post/BasePostDetailDTO.java | 20 ++++++ .../model/dto/post/BasePostMinimalDTO.java | 38 +++++++++++ .../app/model/dto/post/BasePostSimpleDTO.java | 36 ++++++++++ .../app/model/dto/post/PostDetailDTO.java | 1 + .../app/model/dto/post/PostMinimalDTO.java | 1 + .../app/model/dto/post/PostSimpleDTO.java | 1 + .../app/model/dto/post/SheetDetailDTO.java | 1 + .../app/model/dto/post/SheetMinimalDTO.java | 1 + .../app/model/dto/post/SheetSimpleDTO.java | 1 + .../run/halo/app/model/vo/PostDetailVO.java | 3 +- .../run/halo/app/model/vo/PostListVO.java | 8 +-- .../SheetListDTO.java => vo/SheetListVO.java} | 5 +- .../run/halo/app/service/PostService.java | 56 ++-------------- .../run/halo/app/service/SheetService.java | 4 +- .../app/service/base/BasePostService.java | 24 +++++++ .../app/service/impl/BasePostServiceImpl.java | 62 +++++++++++++++++ .../app/service/impl/PostServiceImpl.java | 67 +++---------------- .../app/service/impl/SheetServiceImpl.java | 10 +-- 23 files changed, 258 insertions(+), 168 deletions(-) create mode 100644 src/main/java/run/halo/app/model/dto/post/BasePostDetailDTO.java create mode 100644 src/main/java/run/halo/app/model/dto/post/BasePostMinimalDTO.java create mode 100644 src/main/java/run/halo/app/model/dto/post/BasePostSimpleDTO.java rename src/main/java/run/halo/app/model/{dto/post/SheetListDTO.java => vo/SheetListVO.java} (64%) diff --git a/src/main/java/run/halo/app/controller/admin/api/PostController.java b/src/main/java/run/halo/app/controller/admin/api/PostController.java index ee41fc73c..9f3bad41d 100644 --- a/src/main/java/run/halo/app/controller/admin/api/PostController.java +++ b/src/main/java/run/halo/app/controller/admin/api/PostController.java @@ -5,15 +5,15 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.web.bind.annotation.*; -import run.halo.app.model.dto.post.PostMinimalDTO; -import run.halo.app.model.dto.post.PostSimpleDTO; +import run.halo.app.model.dto.post.BasePostMinimalDTO; +import run.halo.app.model.dto.post.BasePostSimpleDTO; import run.halo.app.model.entity.Post; 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 run.halo.app.service.PostService; import javax.validation.Valid; import java.util.List; @@ -32,16 +32,8 @@ public class PostController { private final PostService postService; - private final PostCategoryService postCategoryService; - - private final PostTagService postTagService; - - public PostController(PostService postService, - PostCategoryService postCategoryService, - PostTagService postTagService) { + public PostController(PostService postService) { this.postService = postService; - this.postCategoryService = postCategoryService; - this.postTagService = postTagService; } @GetMapping @@ -54,29 +46,33 @@ public class PostController { @GetMapping("latest") @ApiOperation("Pages latest post") - public List pageLatest(@RequestParam(name = "top", defaultValue = "10") int top) { - return postService.pageLatestOfMinimal(top).getContent(); + public List pageLatest(@RequestParam(name = "top", defaultValue = "10") int top) { + return postService.convertToMinimal(postService.pageLatest(top).getContent()); } @GetMapping("status/{status}") @ApiOperation("Gets a page of post by post status") - public Page pageByStatus(@PathVariable(name = "status") PostStatus status, - @RequestParam(value = "more", required = false, defaultValue = "false") Boolean more, - @PageableDefault(sort = "editTime", direction = DESC) Pageable pageable) { + public Page pageByStatus(@PathVariable(name = "status") PostStatus status, + @RequestParam(value = "more", required = false, defaultValue = "false") Boolean more, + @PageableDefault(sort = "editTime", direction = DESC) Pageable pageable) { + Page posts = postService.pageBy(status, pageable); + if (more) { - return postService.pageListVoBy(status, pageable); + return postService.convertToListVo(posts); } - return postService.pageSimpleDtoByStatus(status, pageable); + + return postService.convertToSimple(posts); } @GetMapping("{postId:\\d+}") public PostDetailVO getBy(@PathVariable("postId") Integer postId) { - return postService.getDetailVoBy(postId); + Post post = postService.getById(postId); + return postService.convertToDetailVo(post); } - @PostMapping("{postId:\\d+}/likes") + @PutMapping("{postId:\\d+}/likes") @ApiOperation("Likes a post") - public void like(@PathVariable("postId") Integer postId) { + public void likes(@PathVariable("postId") Integer postId) { postService.increaseLike(postId); } @@ -99,7 +95,7 @@ public class PostController { return postService.updateBy(postToUpdate, postParam.getTagIds(), postParam.getCategoryIds()); } - @PutMapping("{postId:\\d+}/{status}") + @PutMapping("{postId:\\d+}/status/{status}") public void updateStatusBy( @PathVariable("postId") Integer postId, @PathVariable("status") PostStatus status) { @@ -116,8 +112,6 @@ public class PostController { public void deletePermanently(@PathVariable("postId") Integer postId) { // Remove it postService.removeById(postId); - postCategoryService.removeByPostId(postId); - postTagService.removeByPostId(postId); } } diff --git a/src/main/java/run/halo/app/controller/admin/api/SheetController.java b/src/main/java/run/halo/app/controller/admin/api/SheetController.java index ddf35e627..5eaeeae15 100644 --- a/src/main/java/run/halo/app/controller/admin/api/SheetController.java +++ b/src/main/java/run/halo/app/controller/admin/api/SheetController.java @@ -6,7 +6,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.web.bind.annotation.*; import run.halo.app.model.dto.post.SheetDetailDTO; -import run.halo.app.model.dto.post.SheetListDTO; +import run.halo.app.model.vo.SheetListVO; import run.halo.app.model.entity.Sheet; import run.halo.app.model.enums.PostStatus; import run.halo.app.model.params.SheetParam; @@ -41,7 +41,7 @@ public class SheetController { @GetMapping @ApiOperation("Gets a page of sheet") - public Page pageBy(@PageableDefault(sort = "editTime", direction = DESC) Pageable pageable) { + public Page pageBy(@PageableDefault(sort = "editTime", direction = DESC) Pageable pageable) { Page sheetPage = sheetService.pageBy(pageable); return sheetService.convertToListDto(sheetPage); } diff --git a/src/main/java/run/halo/app/controller/content/ContentArchiveController.java b/src/main/java/run/halo/app/controller/content/ContentArchiveController.java index e286aaed6..e96f94483 100644 --- a/src/main/java/run/halo/app/controller/content/ContentArchiveController.java +++ b/src/main/java/run/halo/app/controller/content/ContentArchiveController.java @@ -85,12 +85,14 @@ public class ContentArchiveController { @SortDefault(sort = "createTime", direction = DESC) Sort sort) { Pageable pageable = PageRequest.of(page - 1, optionService.getPostPageSize(), sort); - Page posts = postService.pageListVoBy(PostStatus.PUBLISHED, pageable); - int[] pageRainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3); + Page postPage = postService.pageBy(PostStatus.PUBLISHED, pageable); + Page postListVos = postService.convertToListVo(postPage); + int[] pageRainbow = PageUtil.rainbow(page, postListVos.getTotalPages(), 3); model.addAttribute("is_archives", true); model.addAttribute("pageRainbow", pageRainbow); - model.addAttribute("posts", posts); + model.addAttribute("posts", postListVos); + return themeService.render("archives"); } diff --git a/src/main/java/run/halo/app/controller/content/ContentIndexController.java b/src/main/java/run/halo/app/controller/content/ContentIndexController.java index dc80547a3..0713e782b 100644 --- a/src/main/java/run/halo/app/controller/content/ContentIndexController.java +++ b/src/main/java/run/halo/app/controller/content/ContentIndexController.java @@ -12,6 +12,7 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import run.halo.app.model.entity.Post; import run.halo.app.model.enums.PostStatus; import run.halo.app.model.vo.PostListVO; import run.halo.app.service.OptionService; @@ -75,7 +76,9 @@ public class ContentIndexController { int pageSize = optionService.getPostPageSize(); Pageable pageable = PageRequest.of(page >= 1 ? page - 1 : page, pageSize, sort); - Page posts = postService.pageListVoBy(PostStatus.PUBLISHED, pageable); + Page postPage = postService.pageBy(PostStatus.PUBLISHED, pageable); + Page posts = postService.convertToListVo(postPage); + int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3); model.addAttribute("is_index", true); diff --git a/src/main/java/run/halo/app/controller/content/api/PostController.java b/src/main/java/run/halo/app/controller/content/api/PostController.java index b6650cb67..1f00a93b3 100644 --- a/src/main/java/run/halo/app/controller/content/api/PostController.java +++ b/src/main/java/run/halo/app/controller/content/api/PostController.java @@ -8,13 +8,14 @@ import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.data.web.SortDefault; import org.springframework.web.bind.annotation.*; -import run.halo.app.model.dto.post.PostDetailDTO; -import run.halo.app.model.dto.post.PostSimpleDTO; +import run.halo.app.model.dto.post.BasePostDetailDTO; +import run.halo.app.model.dto.post.BasePostSimpleDTO; +import run.halo.app.model.entity.Post; import run.halo.app.model.enums.PostStatus; import run.halo.app.model.vo.BaseCommentVO; import run.halo.app.model.vo.BaseCommentWithParentVO; -import run.halo.app.service.PostCommentService; import run.halo.app.service.OptionService; +import run.halo.app.service.PostCommentService; import run.halo.app.service.PostService; import static org.springframework.data.domain.Sort.Direction.DESC; @@ -45,28 +46,29 @@ public class PostController { @GetMapping @ApiOperation("Lists posts") - public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable) { - return postService.pageSimpleDtoByStatus(PostStatus.PUBLISHED, pageable); + public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable) { + Page postPage = postService.pageBy(PostStatus.PUBLISHED, pageable); + return postService.convertToSimple(postPage); } @GetMapping("{postId:\\d+}") @ApiOperation("Gets a post") - public PostDetailDTO getBy(@PathVariable("postId") Integer postId, - @RequestParam(value = "formatDisabled", required = false, defaultValue = "true") Boolean formatDisabled, - @RequestParam(value = "sourceDisabled", required = false, defaultValue = "false") Boolean sourceDisabled) { - PostDetailDTO postDetail = new PostDetailDTO().convertFrom(postService.getById(postId)); + public BasePostDetailDTO getBy(@PathVariable("postId") Integer postId, + @RequestParam(value = "formatDisabled", required = false, defaultValue = "true") Boolean formatDisabled, + @RequestParam(value = "sourceDisabled", required = false, defaultValue = "false") Boolean sourceDisabled) { + BasePostDetailDTO detailDTO = postService.convertToDetail(postService.getById(postId)); if (formatDisabled) { // Clear the format content - postDetail.setFormatContent(null); + detailDTO.setFormatContent(null); } if (sourceDisabled) { // Clear the original content - postDetail.setOriginalContent(null); + detailDTO.setOriginalContent(null); } - return postDetail; + return detailDTO; } @GetMapping("{postId:\\d+}/comments/tree_view") diff --git a/src/main/java/run/halo/app/model/dto/post/BasePostDetailDTO.java b/src/main/java/run/halo/app/model/dto/post/BasePostDetailDTO.java new file mode 100644 index 000000000..ceb7dc1f0 --- /dev/null +++ b/src/main/java/run/halo/app/model/dto/post/BasePostDetailDTO.java @@ -0,0 +1,20 @@ +package run.halo.app.model.dto.post; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * Base post detail output dto. + * + * @author johnniang + */ +@Data +@ToString +@EqualsAndHashCode(callSuper = true) +public class BasePostDetailDTO extends BasePostSimpleDTO { + + private String originalContent; + + private String formatContent; +} diff --git a/src/main/java/run/halo/app/model/dto/post/BasePostMinimalDTO.java b/src/main/java/run/halo/app/model/dto/post/BasePostMinimalDTO.java new file mode 100644 index 000000000..ca1be35aa --- /dev/null +++ b/src/main/java/run/halo/app/model/dto/post/BasePostMinimalDTO.java @@ -0,0 +1,38 @@ +package run.halo.app.model.dto.post; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import run.halo.app.model.dto.base.OutputConverter; +import run.halo.app.model.entity.BasePost; +import run.halo.app.model.enums.PostStatus; +import run.halo.app.model.enums.PostType; + +import java.util.Date; + +/** + * Base post minimal output dto. + * + * @author johnniang + */ +@Data +@ToString +@EqualsAndHashCode +public class BasePostMinimalDTO implements OutputConverter { + + private Integer id; + + private String title; + + private PostStatus status; + + private String url; + + private PostType type; + + private Date updateTime; + + private Date createTime; + + private Date editTime; +} diff --git a/src/main/java/run/halo/app/model/dto/post/BasePostSimpleDTO.java b/src/main/java/run/halo/app/model/dto/post/BasePostSimpleDTO.java new file mode 100644 index 000000000..525ea3bae --- /dev/null +++ b/src/main/java/run/halo/app/model/dto/post/BasePostSimpleDTO.java @@ -0,0 +1,36 @@ +package run.halo.app.model.dto.post; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import run.halo.app.model.enums.PostCreateFrom; +import run.halo.app.model.enums.PostType; + +/** + * Base page simple output dto. + * + * @author johnniang + */ +@Data +@ToString +@EqualsAndHashCode(callSuper = true) +public class BasePostSimpleDTO extends BasePostMinimalDTO { + + private PostType type; + + private String summary; + + private String thumbnail; + + private Long visits = 0L; + + private Boolean disallowComment; + + private String template; + + private Integer topPriority = 0; + + private PostCreateFrom createFrom; + + private Long likes = 0L; +} diff --git a/src/main/java/run/halo/app/model/dto/post/PostDetailDTO.java b/src/main/java/run/halo/app/model/dto/post/PostDetailDTO.java index dae6adbdc..eaf8eb79f 100644 --- a/src/main/java/run/halo/app/model/dto/post/PostDetailDTO.java +++ b/src/main/java/run/halo/app/model/dto/post/PostDetailDTO.java @@ -12,6 +12,7 @@ import lombok.ToString; @Data @ToString @EqualsAndHashCode(callSuper = true) +@Deprecated public class PostDetailDTO extends PostSimpleDTO { private String originalContent; diff --git a/src/main/java/run/halo/app/model/dto/post/PostMinimalDTO.java b/src/main/java/run/halo/app/model/dto/post/PostMinimalDTO.java index 1d98f375f..d883158a3 100644 --- a/src/main/java/run/halo/app/model/dto/post/PostMinimalDTO.java +++ b/src/main/java/run/halo/app/model/dto/post/PostMinimalDTO.java @@ -18,6 +18,7 @@ import java.util.Date; @Data @ToString @EqualsAndHashCode +@Deprecated public class PostMinimalDTO implements OutputConverter { private Integer id; diff --git a/src/main/java/run/halo/app/model/dto/post/PostSimpleDTO.java b/src/main/java/run/halo/app/model/dto/post/PostSimpleDTO.java index 9dbfa2b21..99d286e4d 100644 --- a/src/main/java/run/halo/app/model/dto/post/PostSimpleDTO.java +++ b/src/main/java/run/halo/app/model/dto/post/PostSimpleDTO.java @@ -14,6 +14,7 @@ import run.halo.app.model.enums.PostType; @Data @ToString @EqualsAndHashCode(callSuper = true) +@Deprecated public class PostSimpleDTO extends PostMinimalDTO { private PostType type; diff --git a/src/main/java/run/halo/app/model/dto/post/SheetDetailDTO.java b/src/main/java/run/halo/app/model/dto/post/SheetDetailDTO.java index 568bf2be3..390f6e2cd 100644 --- a/src/main/java/run/halo/app/model/dto/post/SheetDetailDTO.java +++ b/src/main/java/run/halo/app/model/dto/post/SheetDetailDTO.java @@ -6,6 +6,7 @@ package run.halo.app.model.dto.post; * @author johnniang * @date 19-4-24 */ +@Deprecated public class SheetDetailDTO extends PostDetailDTO { } diff --git a/src/main/java/run/halo/app/model/dto/post/SheetMinimalDTO.java b/src/main/java/run/halo/app/model/dto/post/SheetMinimalDTO.java index c40c4382e..252b65035 100644 --- a/src/main/java/run/halo/app/model/dto/post/SheetMinimalDTO.java +++ b/src/main/java/run/halo/app/model/dto/post/SheetMinimalDTO.java @@ -6,5 +6,6 @@ package run.halo.app.model.dto.post; * @author johnniang * @date 19-4-24 */ +@Deprecated public class SheetMinimalDTO extends PostMinimalDTO { } diff --git a/src/main/java/run/halo/app/model/dto/post/SheetSimpleDTO.java b/src/main/java/run/halo/app/model/dto/post/SheetSimpleDTO.java index 7a8d33ad8..697c19dad 100644 --- a/src/main/java/run/halo/app/model/dto/post/SheetSimpleDTO.java +++ b/src/main/java/run/halo/app/model/dto/post/SheetSimpleDTO.java @@ -6,5 +6,6 @@ package run.halo.app.model.dto.post; * @author johnniang * @date 19-4-24 */ +@Deprecated public class SheetSimpleDTO extends PostSimpleDTO { } diff --git a/src/main/java/run/halo/app/model/vo/PostDetailVO.java b/src/main/java/run/halo/app/model/vo/PostDetailVO.java index 063471b86..9e9e8d8cd 100644 --- a/src/main/java/run/halo/app/model/vo/PostDetailVO.java +++ b/src/main/java/run/halo/app/model/vo/PostDetailVO.java @@ -1,5 +1,6 @@ package run.halo.app.model.vo; +import run.halo.app.model.dto.post.BasePostDetailDTO; import run.halo.app.model.dto.post.PostDetailDTO; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,7 +15,7 @@ import java.util.Set; */ @EqualsAndHashCode(callSuper = true) @Data -public class PostDetailVO extends PostDetailDTO { +public class PostDetailVO extends BasePostDetailDTO { private Set tagIds; diff --git a/src/main/java/run/halo/app/model/vo/PostListVO.java b/src/main/java/run/halo/app/model/vo/PostListVO.java index 381feb6a6..47b40083a 100644 --- a/src/main/java/run/halo/app/model/vo/PostListVO.java +++ b/src/main/java/run/halo/app/model/vo/PostListVO.java @@ -1,10 +1,10 @@ package run.halo.app.model.vo; -import run.halo.app.model.dto.CategoryDTO; -import run.halo.app.model.dto.TagDTO; -import run.halo.app.model.dto.post.PostSimpleDTO; import lombok.Data; import lombok.EqualsAndHashCode; +import run.halo.app.model.dto.CategoryDTO; +import run.halo.app.model.dto.TagDTO; +import run.halo.app.model.dto.post.BasePostSimpleDTO; import java.util.List; @@ -16,7 +16,7 @@ import java.util.List; */ @EqualsAndHashCode(callSuper = true) @Data -public class PostListVO extends PostSimpleDTO { +public class PostListVO extends BasePostSimpleDTO { private Long commentCount; diff --git a/src/main/java/run/halo/app/model/dto/post/SheetListDTO.java b/src/main/java/run/halo/app/model/vo/SheetListVO.java similarity index 64% rename from src/main/java/run/halo/app/model/dto/post/SheetListDTO.java rename to src/main/java/run/halo/app/model/vo/SheetListVO.java index ee5c27b21..4b226f00c 100644 --- a/src/main/java/run/halo/app/model/dto/post/SheetListDTO.java +++ b/src/main/java/run/halo/app/model/vo/SheetListVO.java @@ -1,8 +1,9 @@ -package run.halo.app.model.dto.post; +package run.halo.app.model.vo; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import run.halo.app.model.dto.post.BasePostSimpleDTO; /** * Sheet list dto. @@ -13,7 +14,7 @@ import lombok.ToString; @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class SheetListDTO extends SheetSimpleDTO { +public class SheetListVO extends BasePostSimpleDTO { private Long commentCount; } diff --git a/src/main/java/run/halo/app/service/PostService.java b/src/main/java/run/halo/app/service/PostService.java index 148127baa..e026b4599 100755 --- a/src/main/java/run/halo/app/service/PostService.java +++ b/src/main/java/run/halo/app/service/PostService.java @@ -26,25 +26,6 @@ import java.util.Set; */ public interface PostService extends BasePostService { - /** - * Lists latest posts of minimal. - * - * @param top top number must not be less than 0 - * @return latest posts of minimal - */ - @NonNull - Page pageLatestOfMinimal(int top); - - - /** - * Lists latest posts of simple . - * - * @param top top number must not be less than 0 - * @return latest posts of simple - */ - @NonNull - Page pageLatestOfSimple(int top); - /** * Pages posts. * @@ -65,26 +46,6 @@ public interface PostService extends BasePostService { @NonNull Page pageBy(@NonNull String keyword, @NonNull Pageable pageable); - /** - * Lists simple output dto by status. - * - * @param status post status must not be null - * @param pageable page info must not be null - * @return Page - */ - @NonNull - Page pageSimpleDtoByStatus(@NonNull PostStatus status, @NonNull Pageable pageable); - - /** - * Lists page list vo by status and pageable. - * - * @param status post status must not be null - * @param pageable page info must not be null - * @return a page of page list vo - */ - @NonNull - Page pageListVoBy(@NonNull PostStatus status, @NonNull Pageable pageable); - /** * Creates post by post param. * @@ -120,15 +81,6 @@ public interface PostService extends BasePostService { @Override Post getBy(@NonNull PostStatus status, @NonNull String url); - /** - * Get post detail vo by post id. - * - * @param postId post id must not be null - * @return post detail vo - */ - @NonNull - PostDetailVO getDetailVoBy(@NonNull Integer postId); - /** * Lists year archives. * @@ -146,13 +98,13 @@ public interface PostService extends BasePostService { List listMonthArchives(); /** - * Converts to a page of post simple output dto. + * Converts to detail vo. * - * @param postPage post page must not be null - * @return a page of post simple output dto + * @param post post must not be null + * @return post detail vo */ @NonNull - Page convertToSimpleDto(@NonNull Page postPage); + PostDetailVO convertToDetailVo(@NonNull Post post); /** * Converts to a page of post list vo. diff --git a/src/main/java/run/halo/app/service/SheetService.java b/src/main/java/run/halo/app/service/SheetService.java index 03f2074a6..e320f3928 100644 --- a/src/main/java/run/halo/app/service/SheetService.java +++ b/src/main/java/run/halo/app/service/SheetService.java @@ -3,7 +3,7 @@ package run.halo.app.service; import org.springframework.data.domain.Page; import org.springframework.lang.NonNull; import run.halo.app.model.dto.post.SheetDetailDTO; -import run.halo.app.model.dto.post.SheetListDTO; +import run.halo.app.model.vo.SheetListVO; import run.halo.app.model.entity.Sheet; import run.halo.app.model.enums.PostStatus; import run.halo.app.service.base.BasePostService; @@ -54,7 +54,7 @@ public interface SheetService extends BasePostService { * @return a page of sheet list dto */ @NonNull - Page convertToListDto(@NonNull Page sheetPage); + Page convertToListDto(@NonNull Page sheetPage); } diff --git a/src/main/java/run/halo/app/service/base/BasePostService.java b/src/main/java/run/halo/app/service/base/BasePostService.java index bb36eb196..028a03220 100644 --- a/src/main/java/run/halo/app/service/base/BasePostService.java +++ b/src/main/java/run/halo/app/service/base/BasePostService.java @@ -3,7 +3,11 @@ package run.halo.app.service.base; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; import org.springframework.transaction.annotation.Transactional; +import run.halo.app.model.dto.post.BasePostDetailDTO; +import run.halo.app.model.dto.post.BasePostMinimalDTO; +import run.halo.app.model.dto.post.BasePostSimpleDTO; import run.halo.app.model.entity.BasePost; import run.halo.app.model.enums.PostStatus; @@ -188,4 +192,24 @@ public interface BasePostService extends CrudService convertToMinimal(@Nullable List posts); + + @NonNull + Page convertToMinimal(@NonNull Page postPage); + + @NonNull + BasePostSimpleDTO convertToSimple(@NonNull POST post); + + @NonNull + List convertToSimple(@Nullable List posts); + + @NonNull + Page convertToSimple(@NonNull Page postPage); + + @NonNull + BasePostDetailDTO convertToDetail(@NonNull POST post); } diff --git a/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java b/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java index 36e0902ad..de6d32f4f 100644 --- a/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java @@ -12,6 +12,9 @@ import org.springframework.util.CollectionUtils; import run.halo.app.exception.AlreadyExistsException; import run.halo.app.exception.BadRequestException; import run.halo.app.exception.NotFoundException; +import run.halo.app.model.dto.post.BasePostDetailDTO; +import run.halo.app.model.dto.post.BasePostMinimalDTO; +import run.halo.app.model.dto.post.BasePostSimpleDTO; import run.halo.app.model.entity.BasePost; import run.halo.app.model.enums.PostStatus; import run.halo.app.repository.base.BasePostRepository; @@ -21,9 +24,11 @@ import run.halo.app.utils.DateUtils; import run.halo.app.utils.MarkdownUtils; import run.halo.app.utils.ServiceUtils; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import static org.springframework.data.domain.Sort.Direction.ASC; import static org.springframework.data.domain.Sort.Direction.DESC; @@ -219,6 +224,63 @@ public abstract class BasePostServiceImpl extends Abstrac return post; } + @Override + public BasePostMinimalDTO convertToMinimal(POST post) { + Assert.notNull(post, "Post must not be null"); + + return new BasePostMinimalDTO().convertFrom(post); + } + + @Override + public List convertToMinimal(List posts) { + if (CollectionUtils.isEmpty(posts)) { + return Collections.emptyList(); + } + + return posts.stream() + .map(this::convertToMinimal) + .collect(Collectors.toList()); + } + + @Override + public Page convertToMinimal(Page postPage) { + Assert.notNull(postPage, "Post page must not be null"); + + return postPage.map(this::convertToMinimal); + } + + @Override + public BasePostSimpleDTO convertToSimple(POST post) { + Assert.notNull(post, "Post must not be null"); + + return new BasePostSimpleDTO().convertFrom(post); + } + + @Override + public List convertToSimple(List posts) { + if (CollectionUtils.isEmpty(posts)) { + return Collections.emptyList(); + } + + return posts.stream() + .map(this::convertToSimple) + .collect(Collectors.toList()); + } + + @Override + public Page convertToSimple(Page postPage) { + Assert.notNull(postPage, "Post page must not be null"); + + return postPage.map(this::convertToSimple); + } + + @Override + public BasePostDetailDTO convertToDetail(POST post) { + Assert.notNull(post, "Post must not be null"); + + return new BasePostDetailDTO().convertFrom(post); + } + /** * Check if the url is exist. * 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 9c0bd486e..653a87f5d 100644 --- a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java @@ -81,16 +81,6 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe this.eventPublisher = eventPublisher; } - @Override - public Page pageLatestOfMinimal(int top) { - return pageLatest(top).map(post -> new PostMinimalDTO().convertFrom(post)); - } - - @Override - public Page pageLatestOfSimple(int top) { - return pageLatest(top).map(post -> new PostSimpleDTO().convertFrom(post)); - } - @Override public Page pageBy(PostQuery postQuery, Pageable pageable) { Assert.notNull(postQuery, "Post query must not be null"); @@ -107,6 +97,7 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe PostQuery postQuery = new PostQuery(); postQuery.setKeyword(keyword); + postQuery.setStatus(PostStatus.PUBLISHED); // Build specification and find all return postRepository.findAll(buildSpecByQuery(postQuery), pageable); @@ -154,25 +145,6 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe }; } - /** - * List by status. - * - * @param status status - * @param pageable pageable - * @return Page - */ - @Override - public Page pageSimpleDtoByStatus(PostStatus status, Pageable pageable) { - return pageBy(status, pageable).map(post -> new PostSimpleDTO().convertFrom(post)); - } - - @Override - public Page pageListVoBy(PostStatus status, Pageable pageable) { - Page postPage = pageBy(status, pageable); - - return convertToListVo(postPage); - } - @Override public PostDetailVO createBy(Post postToCreate, Set tagIds, Set categoryIds) { return createOrUpdate(postToCreate, tagIds, categoryIds); @@ -248,16 +220,6 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe return post; } - @Override - public PostDetailVO getDetailVoBy(Integer postId) { - Assert.notNull(postId, "post id must not be null"); - - Post post = getById(postId); - - // Convert to post detail vo - return convertTo(post); - } - @Override public List listYearArchives() { // Get all posts @@ -323,6 +285,13 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe return archives; } + @Override + public PostDetailVO convertToDetailVo(Post post) { + return convertTo(post, + () -> postTagService.listTagIdsByPostId(post.getId()), + () -> postCategoryService.listCategoryIdsByPostId(post.getId())); + } + @Override public Post removeById(Integer postId) { Assert.notNull(postId, "Post id must not be null"); @@ -347,13 +316,6 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe return deletedPost; } - @Override - public Page convertToSimpleDto(@NonNull Page postPage) { - Assert.notNull(postPage, "Post page must not be null"); - - return postPage.map(post -> new PostSimpleDTO().convertFrom(post)); - } - @Override public Page convertToListVo(Page postPage) { Assert.notNull(postPage, "Post page must not be null"); @@ -418,19 +380,6 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe .collect(Collectors.toList()); } - /** - * Converts to post detail vo. - * - * @param post post must not be null - * @return post detail vo - */ - @NonNull - private PostDetailVO convertTo(@NonNull Post post) { - return convertTo(post, - () -> postTagService.listTagIdsByPostId(post.getId()), - () -> postCategoryService.listCategoryIdsByPostId(post.getId())); - } - /** * Converts to post detail vo. * diff --git a/src/main/java/run/halo/app/service/impl/SheetServiceImpl.java b/src/main/java/run/halo/app/service/impl/SheetServiceImpl.java index 6168247da..07d77f660 100644 --- a/src/main/java/run/halo/app/service/impl/SheetServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/SheetServiceImpl.java @@ -7,7 +7,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.Assert; import run.halo.app.event.post.SheetVisitEvent; import run.halo.app.model.dto.post.SheetDetailDTO; -import run.halo.app.model.dto.post.SheetListDTO; +import run.halo.app.model.vo.SheetListVO; import run.halo.app.model.entity.Sheet; import run.halo.app.model.enums.PostStatus; import run.halo.app.repository.SheetRepository; @@ -88,7 +88,7 @@ public class SheetServiceImpl extends BasePostServiceImpl implements Shee } @Override - public Page convertToListDto(Page sheetPage) { + public Page convertToListDto(Page sheetPage) { Assert.notNull(sheetPage, "Sheet page must not be null"); // Get all sheet id @@ -100,9 +100,9 @@ public class SheetServiceImpl extends BasePostServiceImpl implements Shee Map sheetCommentCountMap = sheetCommentService.countByPostIds(sheetIds); return sheetPage.map(sheet -> { - SheetListDTO sheetListDTO = new SheetListDTO().convertFrom(sheet); - sheetListDTO.setCommentCount(sheetCommentCountMap.getOrDefault(sheet.getId(), 0L)); - return sheetListDTO; + SheetListVO sheetListVO = new SheetListVO().convertFrom(sheet); + sheetListVO.setCommentCount(sheetCommentCountMap.getOrDefault(sheet.getId(), 0L)); + return sheetListVO; }); }