From 79ac0b96fdcc85709e4376e3433f3e9787271107 Mon Sep 17 00:00:00 2001 From: ruibaby Date: Thu, 14 Mar 2019 16:59:09 +0800 Subject: [PATCH] posts manage --- .../ryanc/halo/repository/PostRepository.java | 23 +++++++++ .../cc/ryanc/halo/service/PostService.java | 23 +++++++++ .../halo/service/impl/PostServiceImpl.java | 30 ++++++++++++ .../web/controller/admin/PostController.java | 48 +++++++++++++++++++ 4 files changed, 124 insertions(+) diff --git a/src/main/java/cc/ryanc/halo/repository/PostRepository.java b/src/main/java/cc/ryanc/halo/repository/PostRepository.java index 15240af95..70e4423ed 100644 --- a/src/main/java/cc/ryanc/halo/repository/PostRepository.java +++ b/src/main/java/cc/ryanc/halo/repository/PostRepository.java @@ -2,6 +2,8 @@ package cc.ryanc.halo.repository; import cc.ryanc.halo.model.entity.Post; import cc.ryanc.halo.repository.base.BaseRepository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -9,7 +11,28 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; * Post repository. * * @author johnniang + * @author RYAN0UP */ public interface PostRepository extends BaseRepository, JpaSpecificationExecutor { + /** + * Find posts by status and type + * + * @param status status + * @param type type + * @param pageable pageable + * + * @return Page + */ + Page queryAllByStatusAndType(int status, Integer type, Pageable pageable); + + /** + * Count posts by status and type + * + * @param status status + * @param type type + * + * @return posts count + */ + Long countAllByStatusAndType(int status, Integer type); } diff --git a/src/main/java/cc/ryanc/halo/service/PostService.java b/src/main/java/cc/ryanc/halo/service/PostService.java index da4b247b5..a7c90f1e8 100755 --- a/src/main/java/cc/ryanc/halo/service/PostService.java +++ b/src/main/java/cc/ryanc/halo/service/PostService.java @@ -4,12 +4,14 @@ import cc.ryanc.halo.model.dto.post.PostSimpleOutputDTO; import cc.ryanc.halo.model.entity.Post; import cc.ryanc.halo.service.base.CrudService; import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.lang.NonNull; /** * Post service. * * @author johnniang + * @author RYAN0UP */ public interface PostService extends CrudService { @@ -17,9 +19,30 @@ public interface PostService extends CrudService { * Lists latest posts. * * @param top top number must not be less than 0 + * * @return latest posts */ @NonNull Page listLatest(int top); + /** + * List by status and type + * + * @param status status + * @param type type + * @param pageable pageable + * + * @return Page + */ + @NonNull + Page listByStatus(int status, Integer type, Pageable pageable); + + /** + * Count posts by status and type + * + * @param status status + * @param type type + * @return posts count + */ + Long countByStatus(int status,Integer type); } diff --git a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java index 53d4c9170..dda851f7c 100644 --- a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java @@ -7,6 +7,7 @@ import cc.ryanc.halo.service.PostService; import cc.ryanc.halo.service.base.AbstractCrudService; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.util.Assert; @@ -15,6 +16,7 @@ import org.springframework.util.Assert; * Post service implementation. * * @author johnniang + * @author RYAN0UP */ @Service public class PostServiceImpl extends AbstractCrudService implements PostService { @@ -36,4 +38,32 @@ public class PostServiceImpl extends AbstractCrudService implemen return posts.map(post -> new PostSimpleOutputDTO().convertFrom(post)); } + + /** + * List by status and type + * + * @param status status + * @param type type + * @param pageable pageable + * + * @return Page + */ + @Override + public Page listByStatus(int status, Integer type, Pageable pageable) { + Page posts = postRepository.queryAllByStatusAndType(status, type, pageable); + return posts.map(post -> new PostSimpleOutputDTO().convertFrom(post)); + } + + /** + * Count posts by status and type + * + * @param status status + * @param type type + * + * @return posts count + */ + @Override + public Long countByStatus(int status, Integer type) { + return postRepository.countAllByStatusAndType(status,type); + } } diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java index e78185d36..5612157c6 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java @@ -1,7 +1,21 @@ package cc.ryanc.halo.web.controller.admin; +import cc.ryanc.halo.model.dto.post.PostSimpleOutputDTO; +import cc.ryanc.halo.model.enums.PostStatus; +import cc.ryanc.halo.model.enums.PostType; +import cc.ryanc.halo.service.PostService; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.SortDefault; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import static org.springframework.data.domain.Sort.Direction.DESC; /** * Posts controller @@ -12,4 +26,38 @@ import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping(value = "/admin/posts") public class PostController { + + private PostService postService; + + public PostController(PostService postService) { + this.postService = postService; + } + + /** + * posts manage + * + * @param model model + * @param status post status + * @param page current page + * @param sort sort + * + * @return template path: admin/admin_post.ftl + */ + @GetMapping + public String posts(Model model, + @RequestParam(value = "status", defaultValue = "0") Integer status, + @RequestParam(value = "page", defaultValue = "0") Integer page, + @SortDefault.SortDefaults({ + @SortDefault(sort = "postPriority", direction = DESC), + @SortDefault(sort = "postDate", direction = DESC) + }) Sort sort) { + final Pageable pageable = PageRequest.of(page, 10, sort); + final Page posts = postService.listByStatus(status, PostType.POST.getValue(), pageable); + model.addAttribute("posts", posts); + model.addAttribute("publishCount", postService.countByStatus(PostStatus.PUBLISHED.getValue(), PostType.POST.getValue())); + model.addAttribute("draftCount", postService.countByStatus(PostStatus.DRAFT.getValue(), PostType.POST.getValue())); + model.addAttribute("trashCount", postService.countByStatus(PostStatus.RECYCLE.getValue(), PostType.POST.getValue())); + model.addAttribute("status", status); + return "admin/admin_post"; + } }