From d7aebebf18bc10d07bd5ecf0c1ab71a7c1b9418b Mon Sep 17 00:00:00 2001 From: johnniang Date: Thu, 25 Apr 2019 23:13:13 +0800 Subject: [PATCH] Complete journal comment list api --- .../admin/api/JournalCommentController.java | 28 +++++++++-- .../admin/api/PostCommentController.java | 2 +- .../model/vo/JournalCommentWithJournalVO.java | 21 ++++++++ .../app/service/JournalCommentService.java | 11 +++++ .../impl/JournalCommentServiceImpl.java | 49 +++++++++++++++++++ 5 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 src/main/java/run/halo/app/model/vo/JournalCommentWithJournalVO.java diff --git a/src/main/java/run/halo/app/controller/admin/api/JournalCommentController.java b/src/main/java/run/halo/app/controller/admin/api/JournalCommentController.java index c1938ab4c..2bd22d11d 100644 --- a/src/main/java/run/halo/app/controller/admin/api/JournalCommentController.java +++ b/src/main/java/run/halo/app/controller/admin/api/JournalCommentController.java @@ -1,15 +1,21 @@ 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.JournalComment; +import run.halo.app.model.params.CommentQuery; import run.halo.app.model.params.JournalCommentParam; +import run.halo.app.model.vo.JournalCommentWithJournalVO; import run.halo.app.service.JournalCommentService; +import java.util.List; + +import static org.springframework.data.domain.Sort.Direction.DESC; + /** * Journal comment controller. * @@ -26,6 +32,20 @@ public class JournalCommentController { this.journalCommentService = journalCommentService; } + @GetMapping + @ApiOperation("Lists journal comments") + public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable, + CommentQuery commentQuery) { + Page journalCommentPage = journalCommentService.pageBy(commentQuery, pageable); + + return journalCommentService.convertToWithJournalVo(journalCommentPage); + } + + @GetMapping("latest") + public List listLatest(@RequestParam(name = "top", defaultValue = "10") int top) { + return journalCommentService.convertToWithJournalVo(journalCommentService.pageLatest(top).getContent()); + } + @PostMapping @ApiOperation("Creates a journal comment") public BaseCommentDTO createCommentBy(@RequestBody JournalCommentParam journalCommentParam) { 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 3b8face6f..4852e1af0 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 @@ -34,7 +34,7 @@ public class PostCommentController { } @GetMapping - @ApiOperation("Lists comments") + @ApiOperation("Lists post comments") public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable, CommentQuery commentQuery) { Page commentPage = postCommentService.pageBy(commentQuery, pageable); diff --git a/src/main/java/run/halo/app/model/vo/JournalCommentWithJournalVO.java b/src/main/java/run/halo/app/model/vo/JournalCommentWithJournalVO.java new file mode 100644 index 000000000..b6ee8d933 --- /dev/null +++ b/src/main/java/run/halo/app/model/vo/JournalCommentWithJournalVO.java @@ -0,0 +1,21 @@ +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.JournalDTO; + +/** + * Journal comment with journal vo. + * + * @author johnniang + * @date 19-4-25 + */ +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class JournalCommentWithJournalVO extends BaseCommentDTO { + + private JournalDTO journal; +} diff --git a/src/main/java/run/halo/app/service/JournalCommentService.java b/src/main/java/run/halo/app/service/JournalCommentService.java index 3ffc38dc2..2267c964c 100644 --- a/src/main/java/run/halo/app/service/JournalCommentService.java +++ b/src/main/java/run/halo/app/service/JournalCommentService.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.JournalComment; +import run.halo.app.model.vo.JournalCommentWithJournalVO; import run.halo.app.service.base.BaseCommentService; +import java.util.List; + /** * Journal comment service interface. * @@ -11,4 +17,9 @@ import run.halo.app.service.base.BaseCommentService; */ public interface JournalCommentService extends BaseCommentService { + @NonNull + List convertToWithJournalVo(@Nullable List journalComments); + + @NonNull + Page convertToWithJournalVo(@NonNull Page journalCommentPage); } diff --git a/src/main/java/run/halo/app/service/impl/JournalCommentServiceImpl.java b/src/main/java/run/halo/app/service/impl/JournalCommentServiceImpl.java index 536e71632..fc1c5c351 100644 --- a/src/main/java/run/halo/app/service/impl/JournalCommentServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/JournalCommentServiceImpl.java @@ -1,13 +1,27 @@ package run.halo.app.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.stereotype.Service; import run.halo.app.exception.NotFoundException; +import run.halo.app.model.dto.JournalDTO; +import run.halo.app.model.entity.Journal; import run.halo.app.model.entity.JournalComment; +import run.halo.app.model.vo.JournalCommentWithJournalVO; import run.halo.app.repository.JournalCommentRepository; import run.halo.app.repository.JournalRepository; import run.halo.app.service.JournalCommentService; import run.halo.app.service.OptionService; +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; /** * Journal comment service implementation. @@ -36,4 +50,39 @@ public class JournalCommentServiceImpl extends BaseCommentServiceImpl convertToWithJournalVo(List journalComments) { + + if (CollectionUtil.isEmpty(journalComments)) { + return Collections.emptyList(); + } + + Set journalIds = ServiceUtils.fetchProperty(journalComments, JournalComment::getPostId); + + // Get all journals + List journals = journalRepository.findAllById(journalIds); + + Map journalMap = ServiceUtils.convertToMap(journals, Journal::getId); + + return journalComments.stream() + .filter(journalComment -> journalMap.containsKey(journalComment.getPostId())) + .map(journalComment -> { + JournalCommentWithJournalVO journalCmtWithJournalVo = new JournalCommentWithJournalVO().convertFrom(journalComment); + journalCmtWithJournalVo.setJournal(new JournalDTO().convertFrom(journalMap.get(journalComment.getPostId()))); + return journalCmtWithJournalVo; + }) + .collect(Collectors.toList()); + } + + @Override + public Page convertToWithJournalVo(Page journalCommentPage) { + Assert.notNull(journalCommentPage, "Journal comment page must not be null"); + + // Convert the list + List journalCmtWithJournalVOS = convertToWithJournalVo(journalCommentPage.getContent()); + + // Build and return + return new PageImpl<>(journalCmtWithJournalVOS, journalCommentPage.getPageable(), journalCommentPage.getTotalElements()); + } }