Add get preview and next post feature

pull/146/head
johnniang 2019-04-21 11:52:41 +08:00
parent 6f6ed51e8a
commit b6e42e2d7e
3 changed files with 45 additions and 0 deletions

View File

@ -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<Post>, JpaSpecificati
@Query("select sum(p.likes) from Post p")
Long countLike();
@NonNull
Page<Post> findAllByStatusAndCreateTimeBefore(Date createTime, @NonNull Pageable pageable);
@NonNull
Page<Post> findAllByStatusAndCreateTimeAfter(Date createTime, @NonNull Pageable pageable);
}

View File

@ -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<Post, Integer> {
*/
@NonNull
Post filterIfEncrypt(@NonNull Post post);
@NonNull
Optional<Post> getPrePost(@NonNull Date createTime);
@NonNull
Optional<Post> getNextPost(@NonNull Date createTime);
}

View File

@ -437,6 +437,32 @@ public class PostServiceImpl extends AbstractCrudService<Post, Integer> implemen
return post;
}
@Override
public Optional<Post> getPrePost(Date createTime) {
Assert.notNull(createTime, "Create time must not be null");
Page<Post> prePostPage = postRepository.findAllByStatusAndCreateTimeAfter(createTime, PageRequest.of(0, 1));
if (prePostPage.isEmpty()) {
return Optional.empty();
}
return Optional.of(prePostPage.getContent().get(0));
}
@Override
public Optional<Post> getNextPost(Date createTime) {
Assert.notNull(createTime, "Create time must not be null");
Page<Post> 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.
*