diff --git a/src/main/java/run/halo/app/controller/admin/api/JournalController.java b/src/main/java/run/halo/app/controller/admin/api/JournalController.java index b50e245d4..4162b6cf5 100644 --- a/src/main/java/run/halo/app/controller/admin/api/JournalController.java +++ b/src/main/java/run/halo/app/controller/admin/api/JournalController.java @@ -1,6 +1,8 @@ package run.halo.app.controller.admin.api; import io.swagger.annotations.ApiOperation; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; import run.halo.app.model.dto.BaseCommentDTO; import run.halo.app.model.entity.Journal; @@ -25,6 +27,13 @@ public class JournalController { this.journalService = journalService; } + @GetMapping + @ApiOperation("Gets latest journals") + public Page pageBy(Pageable pageable) { + Page journalPage = journalService.pageBy(pageable); + return journalService.convertTo(journalPage); + } + @GetMapping("latest") @ApiOperation("Gets latest journals") public List pageLatest(@RequestParam(name = "top", defaultValue = "10") int top) { diff --git a/src/main/java/run/halo/app/repository/JournalRepository.java b/src/main/java/run/halo/app/repository/JournalRepository.java index f774bbfe8..947a1b1a2 100644 --- a/src/main/java/run/halo/app/repository/JournalRepository.java +++ b/src/main/java/run/halo/app/repository/JournalRepository.java @@ -1,5 +1,7 @@ package run.halo.app.repository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.lang.NonNull; import run.halo.app.model.entity.Journal; @@ -25,4 +27,13 @@ public interface JournalRepository extends BaseCommentRepository { @Query("select new run.halo.app.model.projection.CommentCountProjection(count(comment.id), comment.postId) from Journal comment where comment.postId in ?1 group by comment.postId") @NonNull List countByPostIds(@NonNull Iterable postIds); + + /** + * Finds all journals by parent id. + * + * @param parentId parent id must not be null + * @param pageable page info must not be null + * @return a page of journal + */ + Page findAllByParentId(@NonNull Long parentId, @NonNull Pageable pageable); } diff --git a/src/main/java/run/halo/app/service/JournalService.java b/src/main/java/run/halo/app/service/JournalService.java index 54197bca5..b7efc5f4f 100644 --- a/src/main/java/run/halo/app/service/JournalService.java +++ b/src/main/java/run/halo/app/service/JournalService.java @@ -1,5 +1,7 @@ package run.halo.app.service; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.lang.NonNull; import run.halo.app.model.entity.Journal; import run.halo.app.model.params.JournalParam; @@ -22,4 +24,11 @@ public interface JournalService extends BaseCommentService { @NonNull Journal createBy(@NonNull JournalParam journalParam); + /** + * Gets a page of journal + * + * @param pageable page info must not be null + * @return a page of journal + */ + Page pageBy(@NonNull Pageable pageable); } diff --git a/src/main/java/run/halo/app/service/base/BaseCommentService.java b/src/main/java/run/halo/app/service/base/BaseCommentService.java index 1b258b43c..3bf72de87 100644 --- a/src/main/java/run/halo/app/service/base/BaseCommentService.java +++ b/src/main/java/run/halo/app/service/base/BaseCommentService.java @@ -133,4 +133,13 @@ public interface BaseCommentService extends CrudSer */ @NonNull List convertTo(@NonNull List comments); + + /** + * Converts to base comment dto page. + * + * @param commentPage comment page must not be null + * @return a page of base comment dto + */ + @NonNull + Page convertTo(@NonNull Page commentPage); } diff --git a/src/main/java/run/halo/app/service/impl/BaseCommentServiceImpl.java b/src/main/java/run/halo/app/service/impl/BaseCommentServiceImpl.java index 083c994d7..e2f40c5d2 100644 --- a/src/main/java/run/halo/app/service/impl/BaseCommentServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/BaseCommentServiceImpl.java @@ -78,12 +78,7 @@ public abstract class BaseCommentServiceImpl extend @Override public Page pageLatest(int top) { - Assert.isTrue(top > 0, "Top number must not be less than 0"); - - // Build page request - PageRequest latestPageable = PageRequest.of(0, top, Sort.by(Sort.Direction.DESC, "createTime")); - - return listAll(latestPageable); + return listAll(buildLatestPageable(top)); } @Override @@ -293,6 +288,13 @@ public abstract class BaseCommentServiceImpl extend .collect(Collectors.toList()); } + @Override + public Page convertTo(Page commentPage) { + Assert.notNull(commentPage, "Comment page must not be null"); + + return commentPage.map(this::convertTo); + } + @Override public BaseCommentDTO convertTo(COMMENT comment) { Assert.notNull(comment, "Comment must not be null"); @@ -301,7 +303,7 @@ public abstract class BaseCommentServiceImpl extend } @NonNull - private Specification buildSpecByQuery(@NonNull CommentQuery commentQuery) { + protected Specification buildSpecByQuery(@NonNull CommentQuery commentQuery) { Assert.notNull(commentQuery, "Comment query must not be null"); return (Specification) (root, query, criteriaBuilder) -> { @@ -332,7 +334,7 @@ public abstract class BaseCommentServiceImpl extend * @param sort sort info * @return comment comparator */ - private Comparator buildCommentComparator(Sort sort) { + protected Comparator buildCommentComparator(Sort sort) { return (currentComment, toCompareComment) -> { Assert.notNull(currentComment, "Current comment must not be null"); Assert.notNull(toCompareComment, "Comment to compare must not be null"); @@ -358,9 +360,9 @@ public abstract class BaseCommentServiceImpl extend * @param comments comment list must not null * @param commentComparator comment vo comparator */ - private void concreteTree(@NonNull BaseCommentVO parentComment, - @Nullable Collection comments, - @NonNull Comparator commentComparator) { + protected void concreteTree(@NonNull BaseCommentVO parentComment, + @Nullable Collection comments, + @NonNull Comparator commentComparator) { Assert.notNull(parentComment, "Parent comment must not be null"); Assert.notNull(commentComparator, "Comment comparator must not be null"); @@ -403,4 +405,17 @@ public abstract class BaseCommentServiceImpl extend parentComment.getChildren().sort(commentComparator); } } + + /** + * Builds latest page request. + * + * @param top top must not be less than 1 + * @return latest page request + */ + @NonNull + Pageable buildLatestPageable(int top) { + Assert.isTrue(top > 0, "Top number must not be less than 0"); + + return PageRequest.of(0, top, Sort.by(Sort.Direction.DESC, "createTime")); + } } diff --git a/src/main/java/run/halo/app/service/impl/JournalServiceImpl.java b/src/main/java/run/halo/app/service/impl/JournalServiceImpl.java index 57728bd27..f4b564dc0 100644 --- a/src/main/java/run/halo/app/service/impl/JournalServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/JournalServiceImpl.java @@ -3,6 +3,8 @@ package run.halo.app.service.impl; import cn.hutool.core.lang.Assert; import org.apache.commons.lang3.StringUtils; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import run.halo.app.model.entity.Journal; import run.halo.app.model.entity.User; @@ -57,4 +59,17 @@ public class JournalServiceImpl extends BaseCommentServiceImpl implemen // Convert, create and return return createBy(journalParam.convertTo()); } + + @Override + public Page pageBy(Pageable pageable) { + Assert.notNull(pageable, "Page info must not be null"); + + return journalRepository.findAllByParentId(0L, pageable); + } + + @Override + public Page pageLatest(int top) { + return pageBy(buildLatestPageable(top)); + } + }