From 619d30bac31d43f167c10b1c0b6c105f067b6bd1 Mon Sep 17 00:00:00 2001 From: johnniang Date: Fri, 26 Apr 2019 00:08:35 +0800 Subject: [PATCH] Complete sheet comment list api --- .../admin/api/PostCommentController.java | 6 +-- .../admin/api/SheetCommentController.java | 29 +++++++++++-- .../content/api/CommentController.java | 6 +-- ...ommentParam.java => PostCommentParam.java} | 2 +- .../app/model/vo/SheetCommentWithSheetVO.java | 20 +++++++++ .../halo/app/service/SheetCommentService.java | 11 +++++ .../service/impl/SheetCommentServiceImpl.java | 42 +++++++++++++++++++ 7 files changed, 105 insertions(+), 11 deletions(-) rename src/main/java/run/halo/app/model/params/{CommentParam.java => PostCommentParam.java} (81%) create mode 100644 src/main/java/run/halo/app/model/vo/SheetCommentWithSheetVO.java diff --git a/src/main/java/run/halo/app/controller/admin/api/PostCommentController.java b/src/main/java/run/halo/app/controller/admin/api/PostCommentController.java index 4852e1af0..7aa997ccc 100644 --- a/src/main/java/run/halo/app/controller/admin/api/PostCommentController.java +++ b/src/main/java/run/halo/app/controller/admin/api/PostCommentController.java @@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.*; import run.halo.app.model.dto.BaseCommentDTO; import run.halo.app.model.entity.PostComment; import run.halo.app.model.enums.CommentStatus; -import run.halo.app.model.params.CommentParam; +import run.halo.app.model.params.PostCommentParam; import run.halo.app.model.params.CommentQuery; import run.halo.app.model.vo.PostCommentWithPostVO; import run.halo.app.service.PostCommentService; @@ -50,8 +50,8 @@ public class PostCommentController { @PostMapping @ApiOperation("Creates a comment (new or reply)") - public BaseCommentDTO createBy(@RequestBody CommentParam commentParam) { - PostComment createdPostComment = postCommentService.createBy(commentParam); + public BaseCommentDTO createBy(@RequestBody PostCommentParam postCommentParam) { + PostComment createdPostComment = postCommentService.createBy(postCommentParam); return postCommentService.convertTo(createdPostComment); } diff --git a/src/main/java/run/halo/app/controller/admin/api/SheetCommentController.java b/src/main/java/run/halo/app/controller/admin/api/SheetCommentController.java index d50abe9b9..2ea038511 100644 --- a/src/main/java/run/halo/app/controller/admin/api/SheetCommentController.java +++ b/src/main/java/run/halo/app/controller/admin/api/SheetCommentController.java @@ -1,16 +1,24 @@ package run.halo.app.controller.admin.api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableDefault; +import org.springframework.web.bind.annotation.*; import run.halo.app.model.dto.BaseCommentDTO; import run.halo.app.model.entity.SheetComment; +import run.halo.app.model.params.CommentQuery; import run.halo.app.model.params.SheetCommentParam; +import run.halo.app.model.vo.SheetCommentWithSheetVO; import run.halo.app.service.SheetCommentService; +import java.util.List; + +import static org.springframework.data.domain.Sort.Direction.DESC; + /** + * Sheet comment controller. + * * @author johnniang * @date 19-4-25 */ @@ -24,6 +32,19 @@ public class SheetCommentController { this.sheetCommentService = sheetCommentService; } + @GetMapping + public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable, + CommentQuery commentQuery) { + Page sheetCommentPage = sheetCommentService.pageBy(commentQuery, pageable); + return sheetCommentService.convertToWithPostVo(sheetCommentPage); + } + + @GetMapping("latest") + public List listLatest(@RequestParam(name = "top", defaultValue = "10") int top) { + Page sheetCommentPage = sheetCommentService.pageLatest(top); + return sheetCommentService.convertToWithPostVo(sheetCommentPage.getContent()); + } + @PostMapping @ApiOperation("Creates a comment (new or reply)") public BaseCommentDTO createBy(@RequestBody SheetCommentParam commentParam) { diff --git a/src/main/java/run/halo/app/controller/content/api/CommentController.java b/src/main/java/run/halo/app/controller/content/api/CommentController.java index f47cf8b3f..1c7cb7ded 100644 --- a/src/main/java/run/halo/app/controller/content/api/CommentController.java +++ b/src/main/java/run/halo/app/controller/content/api/CommentController.java @@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import run.halo.app.model.dto.BaseCommentDTO; -import run.halo.app.model.params.CommentParam; +import run.halo.app.model.params.PostCommentParam; import run.halo.app.service.PostCommentService; /** @@ -27,7 +27,7 @@ public class CommentController { @PostMapping @ApiOperation("Comments a post") - public BaseCommentDTO comment(@RequestBody CommentParam commentParam) { - return postCommentService.convertTo(postCommentService.createBy(commentParam)); + public BaseCommentDTO comment(@RequestBody PostCommentParam postCommentParam) { + return postCommentService.convertTo(postCommentService.createBy(postCommentParam)); } } diff --git a/src/main/java/run/halo/app/model/params/CommentParam.java b/src/main/java/run/halo/app/model/params/PostCommentParam.java similarity index 81% rename from src/main/java/run/halo/app/model/params/CommentParam.java rename to src/main/java/run/halo/app/model/params/PostCommentParam.java index a1c442b75..cd12c28ee 100644 --- a/src/main/java/run/halo/app/model/params/CommentParam.java +++ b/src/main/java/run/halo/app/model/params/PostCommentParam.java @@ -14,6 +14,6 @@ import run.halo.app.model.entity.PostComment; @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class CommentParam extends BaseCommentParam { +public class PostCommentParam extends BaseCommentParam { } diff --git a/src/main/java/run/halo/app/model/vo/SheetCommentWithSheetVO.java b/src/main/java/run/halo/app/model/vo/SheetCommentWithSheetVO.java new file mode 100644 index 000000000..d3b25f67b --- /dev/null +++ b/src/main/java/run/halo/app/model/vo/SheetCommentWithSheetVO.java @@ -0,0 +1,20 @@ +package run.halo.app.model.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import run.halo.app.model.dto.BaseCommentDTO; +import run.halo.app.model.dto.post.BasePostMinimalDTO; + +/** + * PostComment list with post vo. + * + * @author johnniang + */ +@Data +@ToString +@EqualsAndHashCode(callSuper = true) +public class SheetCommentWithSheetVO extends BaseCommentDTO { + + private BasePostMinimalDTO sheet; +} diff --git a/src/main/java/run/halo/app/service/SheetCommentService.java b/src/main/java/run/halo/app/service/SheetCommentService.java index df44aefc0..a63df91da 100644 --- a/src/main/java/run/halo/app/service/SheetCommentService.java +++ b/src/main/java/run/halo/app/service/SheetCommentService.java @@ -1,8 +1,14 @@ package run.halo.app.service; +import org.springframework.data.domain.Page; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; import run.halo.app.model.entity.SheetComment; +import run.halo.app.model.vo.SheetCommentWithSheetVO; import run.halo.app.service.base.BaseCommentService; +import java.util.List; + /** * Sheet comment service interface. * @@ -11,4 +17,9 @@ import run.halo.app.service.base.BaseCommentService; */ public interface SheetCommentService extends BaseCommentService { + @NonNull + List convertToWithPostVo(@Nullable List sheetComments); + + @NonNull + Page convertToWithPostVo(@NonNull Page sheetCommentPage); } diff --git a/src/main/java/run/halo/app/service/impl/SheetCommentServiceImpl.java b/src/main/java/run/halo/app/service/impl/SheetCommentServiceImpl.java index 0367b4204..0decd4ccb 100644 --- a/src/main/java/run/halo/app/service/impl/SheetCommentServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/SheetCommentServiceImpl.java @@ -1,13 +1,27 @@ package run.halo.app.service.impl; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; import run.halo.app.exception.NotFoundException; +import run.halo.app.model.dto.post.BasePostMinimalDTO; +import run.halo.app.model.entity.Sheet; import run.halo.app.model.entity.SheetComment; +import run.halo.app.model.vo.SheetCommentWithSheetVO; import run.halo.app.repository.SheetCommentRepository; import run.halo.app.repository.SheetRepository; import run.halo.app.service.OptionService; import run.halo.app.service.SheetCommentService; +import run.halo.app.utils.ServiceUtils; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * Sheet comment service implementation. @@ -37,4 +51,32 @@ public class SheetCommentServiceImpl extends BaseCommentServiceImpl convertToWithPostVo(List sheetComments) { + if (CollectionUtils.isEmpty(sheetComments)) { + return Collections.emptyList(); + } + + Set sheetIds = ServiceUtils.fetchProperty(sheetComments, SheetComment::getPostId); + + Map sheetMap = ServiceUtils.convertToMap(sheetRepository.findAllById(sheetIds), Sheet::getId); + + return sheetComments.stream() + .filter(comment -> sheetMap.containsKey(comment.getPostId())) + .map(comment -> { + SheetCommentWithSheetVO sheetCmtWithPostVO = new SheetCommentWithSheetVO().convertFrom(comment); + sheetCmtWithPostVO.setSheet(new BasePostMinimalDTO().convertFrom(sheetMap.get(comment.getPostId()))); + return sheetCmtWithPostVO; + }) + .collect(Collectors.toList()); + } + + @Override + public Page convertToWithPostVo(Page sheetCommentPage) { + Assert.notNull(sheetCommentPage, "Sheet comment page must not be null"); + + return new PageImpl<>(convertToWithPostVo(sheetCommentPage.getContent()), sheetCommentPage.getPageable(), sheetCommentPage.getTotalElements()); + + } }