From ef3780369de7190f27dfd27bf1efb0a8661b6092 Mon Sep 17 00:00:00 2001 From: johnniang Date: Thu, 14 Mar 2019 16:21:22 +0800 Subject: [PATCH] complete list latest comments service --- .../halo/model/dto/CommentOutputDTO.java | 41 +++++++++++++++++ .../dto/{ => post}/PostDetailOutputDTO.java | 2 +- .../dto/{ => post}/PostSimpleOutputDTO.java | 15 ++----- .../halo/model/dto/post/PostWithTitleDTO.java | 26 +++++++++++ .../cc/ryanc/halo/model/entity/Comment.java | 6 +++ .../cc/ryanc/halo/model/vo/CommentVO.java | 20 +++++++++ .../cc/ryanc/halo/service/CommentService.java | 9 ++++ .../cc/ryanc/halo/service/PostService.java | 2 +- .../halo/service/impl/CommentServiceImpl.java | 45 ++++++++++++++++++- .../halo/service/impl/PostServiceImpl.java | 2 +- .../web/controller/admin/AdminController.java | 16 +++++-- 11 files changed, 164 insertions(+), 20 deletions(-) create mode 100644 src/main/java/cc/ryanc/halo/model/dto/CommentOutputDTO.java rename src/main/java/cc/ryanc/halo/model/dto/{ => post}/PostDetailOutputDTO.java (90%) rename src/main/java/cc/ryanc/halo/model/dto/{ => post}/PostSimpleOutputDTO.java (79%) create mode 100644 src/main/java/cc/ryanc/halo/model/dto/post/PostWithTitleDTO.java create mode 100644 src/main/java/cc/ryanc/halo/model/vo/CommentVO.java diff --git a/src/main/java/cc/ryanc/halo/model/dto/CommentOutputDTO.java b/src/main/java/cc/ryanc/halo/model/dto/CommentOutputDTO.java new file mode 100644 index 000000000..8cd90a2cb --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/dto/CommentOutputDTO.java @@ -0,0 +1,41 @@ +package cc.ryanc.halo.model.dto; + +import cc.ryanc.halo.model.dto.base.OutputConverter; +import cc.ryanc.halo.model.entity.Comment; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Date; + +/** + * Comment output dto. + * + * @author johnniang + */ +@Data +@ToString +@EqualsAndHashCode +public class CommentOutputDTO implements OutputConverter { + + private Long id; + + private String author; + + private String email; + + private String ipAddress; + + private String gavatarMd5; + + private String content; + + private String userAgent; + + private Long parentId; + + private Boolean isAdmin; + + private Date createTime; + +} diff --git a/src/main/java/cc/ryanc/halo/model/dto/PostDetailOutputDTO.java b/src/main/java/cc/ryanc/halo/model/dto/post/PostDetailOutputDTO.java similarity index 90% rename from src/main/java/cc/ryanc/halo/model/dto/PostDetailOutputDTO.java rename to src/main/java/cc/ryanc/halo/model/dto/post/PostDetailOutputDTO.java index 41ab0bd20..6e9e214a2 100644 --- a/src/main/java/cc/ryanc/halo/model/dto/PostDetailOutputDTO.java +++ b/src/main/java/cc/ryanc/halo/model/dto/post/PostDetailOutputDTO.java @@ -1,4 +1,4 @@ -package cc.ryanc.halo.model.dto; +package cc.ryanc.halo.model.dto.post; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/src/main/java/cc/ryanc/halo/model/dto/PostSimpleOutputDTO.java b/src/main/java/cc/ryanc/halo/model/dto/post/PostSimpleOutputDTO.java similarity index 79% rename from src/main/java/cc/ryanc/halo/model/dto/PostSimpleOutputDTO.java rename to src/main/java/cc/ryanc/halo/model/dto/post/PostSimpleOutputDTO.java index 4c597066b..dd9a1de0c 100644 --- a/src/main/java/cc/ryanc/halo/model/dto/PostSimpleOutputDTO.java +++ b/src/main/java/cc/ryanc/halo/model/dto/post/PostSimpleOutputDTO.java @@ -1,7 +1,5 @@ -package cc.ryanc.halo.model.dto; +package cc.ryanc.halo.model.dto.post; -import cc.ryanc.halo.model.dto.base.OutputConverter; -import cc.ryanc.halo.model.entity.Post; import cc.ryanc.halo.model.enums.PostCreateFrom; import cc.ryanc.halo.model.enums.PostType; import lombok.Data; @@ -17,15 +15,8 @@ import java.util.Date; */ @Data @ToString -@EqualsAndHashCode -public class PostSimpleOutputDTO implements OutputConverter { - - private Integer id; - - /** - * 文章标题 - */ - private String title; +@EqualsAndHashCode(callSuper = true) +public class PostSimpleOutputDTO extends PostWithTitleDTO { /** * 文章类型 diff --git a/src/main/java/cc/ryanc/halo/model/dto/post/PostWithTitleDTO.java b/src/main/java/cc/ryanc/halo/model/dto/post/PostWithTitleDTO.java new file mode 100644 index 000000000..3842a76de --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/dto/post/PostWithTitleDTO.java @@ -0,0 +1,26 @@ +package cc.ryanc.halo.model.dto.post; + +import cc.ryanc.halo.model.dto.base.OutputConverter; +import cc.ryanc.halo.model.entity.Post; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * Page with title only dto. + * + * @author johnniang + */ +@Data +@ToString +@EqualsAndHashCode +public class PostWithTitleDTO implements OutputConverter { + + private Integer id; + + /** + * 文章标题 + */ + private String title; + +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/Comment.java b/src/main/java/cc/ryanc/halo/model/entity/Comment.java index bc9390d27..cfd09823c 100644 --- a/src/main/java/cc/ryanc/halo/model/entity/Comment.java +++ b/src/main/java/cc/ryanc/halo/model/entity/Comment.java @@ -69,6 +69,12 @@ public class Comment { @Column(name = "is_admin", columnDefinition = "tinyint default 0") private Boolean isAdmin; + /** + * Post id. + */ + @Column(name = "post_id", columnDefinition = "int not null") + private Integer postId; + /** * 上级评论 */ diff --git a/src/main/java/cc/ryanc/halo/model/vo/CommentVO.java b/src/main/java/cc/ryanc/halo/model/vo/CommentVO.java new file mode 100644 index 000000000..a02d1dc2b --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/vo/CommentVO.java @@ -0,0 +1,20 @@ +package cc.ryanc.halo.model.vo; + +import cc.ryanc.halo.model.dto.CommentOutputDTO; +import cc.ryanc.halo.model.dto.post.PostWithTitleDTO; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * Comment vo. + * + * @author johnniang + */ +@Data +@ToString +@EqualsAndHashCode(callSuper = true) +public class CommentVO extends CommentOutputDTO { + + private PostWithTitleDTO post; +} diff --git a/src/main/java/cc/ryanc/halo/service/CommentService.java b/src/main/java/cc/ryanc/halo/service/CommentService.java index d61a8e424..02faf78d7 100644 --- a/src/main/java/cc/ryanc/halo/service/CommentService.java +++ b/src/main/java/cc/ryanc/halo/service/CommentService.java @@ -1,7 +1,9 @@ package cc.ryanc.halo.service; import cc.ryanc.halo.model.entity.Comment; +import cc.ryanc.halo.model.vo.CommentVO; import cc.ryanc.halo.service.base.CrudService; +import org.springframework.data.domain.Page; /** * Comment service. @@ -10,4 +12,11 @@ import cc.ryanc.halo.service.base.CrudService; */ public interface CommentService extends CrudService { + /** + * Lists latest comments. + * + * @param top top number must not be less than 0 + * @return a page of comments + */ + Page listLatest(int top); } diff --git a/src/main/java/cc/ryanc/halo/service/PostService.java b/src/main/java/cc/ryanc/halo/service/PostService.java index 1ad3573b8..da4b247b5 100755 --- a/src/main/java/cc/ryanc/halo/service/PostService.java +++ b/src/main/java/cc/ryanc/halo/service/PostService.java @@ -1,6 +1,6 @@ package cc.ryanc.halo.service; -import cc.ryanc.halo.model.dto.PostSimpleOutputDTO; +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; diff --git a/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java index 43e8233be..727cf05e3 100644 --- a/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java @@ -1,10 +1,22 @@ package cc.ryanc.halo.service.impl; +import cc.ryanc.halo.model.dto.post.PostWithTitleDTO; import cc.ryanc.halo.model.entity.Comment; +import cc.ryanc.halo.model.entity.Post; +import cc.ryanc.halo.model.vo.CommentVO; import cc.ryanc.halo.repository.CommentRepository; import cc.ryanc.halo.service.CommentService; +import cc.ryanc.halo.service.PostService; import cc.ryanc.halo.service.base.AbstractCrudService; +import cc.ryanc.halo.utils.ServiceUtils; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.Map; +import java.util.Set; /** * CommentService implementation class @@ -17,8 +29,39 @@ public class CommentServiceImpl extends AbstractCrudService imple private final CommentRepository commentRepository; - public CommentServiceImpl(CommentRepository commentRepository) { + private final PostService postService; + + public CommentServiceImpl(CommentRepository commentRepository, + PostService postService) { super(commentRepository); this.commentRepository = commentRepository; + this.postService = postService; + } + + @Override + public Page listLatest(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")); + + // List all comments + Page comments = listAll(latestPageable); + + // Fetch goods ids + Set postIds = ServiceUtils.fetchProperty(comments.getContent(), Comment::getPostId); + + // Get all posts + Map postMap = ServiceUtils.convertToMap(postService.listAllByIds(postIds), Post::getId); + + return comments.map(comment -> { + // Convert to vo + CommentVO commentVO = new CommentVO().convertFrom(comment); + + // Get post and set to the vo + commentVO.setPost(new PostWithTitleDTO().convertFrom(postMap.get(comment.getPostId()))); + + return commentVO; + }); } } 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 48a5091e3..53d4c9170 100644 --- a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java @@ -1,6 +1,6 @@ package cc.ryanc.halo.service.impl; -import cc.ryanc.halo.model.dto.PostSimpleOutputDTO; +import cc.ryanc.halo.model.dto.post.PostSimpleOutputDTO; import cc.ryanc.halo.model.entity.Post; import cc.ryanc.halo.repository.PostRepository; import cc.ryanc.halo.service.PostService; diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java index 91f120ec3..e4fa806b7 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java @@ -1,6 +1,8 @@ package cc.ryanc.halo.web.controller.admin; -import cc.ryanc.halo.model.dto.PostSimpleOutputDTO; +import cc.ryanc.halo.model.dto.LogOutputDTO; +import cc.ryanc.halo.model.dto.post.PostSimpleOutputDTO; +import cc.ryanc.halo.model.vo.CommentVO; import cc.ryanc.halo.service.AttachmentService; import cc.ryanc.halo.service.CommentService; import cc.ryanc.halo.service.LogService; @@ -48,14 +50,20 @@ public class AdminController { @GetMapping(value = {"", "/index"}) public String admin(Model model) { - Page postPage = postService.listLatest(10); + Page postPage = postService.listLatest(5); + + Page commentPage = commentService.listLatest(5); + + Page logPage = logService.listLatest(5); model.addAttribute("postsCount", postPage.getTotalElements()); - model.addAttribute("commentsCount", commentService.count()); + model.addAttribute("commentsCount", commentPage.getTotalElements()); model.addAttribute("attachmentsCount", attachmentService.count()); model.addAttribute("latestPosts", postPage.getContent()); - model.addAttribute("latestLogs", logService.listLatest(10).getContent()); + model.addAttribute("latestLogs", logPage.getContent()); + model.addAttribute("latestComments", commentPage.getContent()); + return "admin/admin_index"; } }