diff --git a/src/main/java/run/halo/app/repository/PostRepository.java b/src/main/java/run/halo/app/repository/PostRepository.java index 85eba224e..9676bc452 100644 --- a/src/main/java/run/halo/app/repository/PostRepository.java +++ b/src/main/java/run/halo/app/repository/PostRepository.java @@ -1,10 +1,15 @@ package run.halo.app.repository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; +import org.springframework.lang.NonNull; import run.halo.app.model.entity.Post; import run.halo.app.repository.base.BasePostRepository; +import java.util.Date; + /** * Post repository. @@ -19,4 +24,10 @@ public interface PostRepository extends BasePostRepository, JpaSpecificati @Query("select sum(p.likes) from Post p") Long countLike(); + + @NonNull + Page findAllByStatusAndCreateTimeBefore(Date createTime, @NonNull Pageable pageable); + + @NonNull + Page findAllByStatusAndCreateTimeAfter(Date createTime, @NonNull Pageable pageable); } diff --git a/src/main/java/run/halo/app/service/PostService.java b/src/main/java/run/halo/app/service/PostService.java index 7cc33b8b6..b09934711 100755 --- a/src/main/java/run/halo/app/service/PostService.java +++ b/src/main/java/run/halo/app/service/PostService.java @@ -15,7 +15,9 @@ import run.halo.app.model.vo.PostDetailVO; import run.halo.app.model.vo.PostListVO; import run.halo.app.service.base.CrudService; +import java.util.Date; import java.util.List; +import java.util.Optional; import java.util.Set; /** @@ -211,4 +213,10 @@ public interface PostService extends CrudService { */ @NonNull Post filterIfEncrypt(@NonNull Post post); + + @NonNull + Optional getPrePost(@NonNull Date createTime); + + @NonNull + Optional getNextPost(@NonNull Date createTime); } 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 11968aee6..3fe3cb3a9 100644 --- a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java @@ -437,6 +437,32 @@ public class PostServiceImpl extends AbstractCrudService implemen return post; } + @Override + public Optional getPrePost(Date createTime) { + Assert.notNull(createTime, "Create time must not be null"); + + Page prePostPage = postRepository.findAllByStatusAndCreateTimeAfter(createTime, PageRequest.of(0, 1)); + + if (prePostPage.isEmpty()) { + return Optional.empty(); + } + + return Optional.of(prePostPage.getContent().get(0)); + } + + @Override + public Optional getNextPost(Date createTime) { + Assert.notNull(createTime, "Create time must not be null"); + + Page prePostPage = postRepository.findAllByStatusAndCreateTimeBefore(createTime, PageRequest.of(0, 1)); + + if (prePostPage.isEmpty()) { + return Optional.empty(); + } + + return Optional.of(prePostPage.getContent().get(0)); + } + /** * Converts to post minimal output dto. *