diff --git a/src/main/java/io/github/xxyopen/novel/controller/front/UserController.java b/src/main/java/io/github/xxyopen/novel/controller/front/UserController.java index c25c4ae..27bef85 100644 --- a/src/main/java/io/github/xxyopen/novel/controller/front/UserController.java +++ b/src/main/java/io/github/xxyopen/novel/controller/front/UserController.java @@ -1,6 +1,8 @@ package io.github.xxyopen.novel.controller.front; import io.github.xxyopen.novel.core.auth.UserHolder; +import io.github.xxyopen.novel.core.common.req.PageReqDto; +import io.github.xxyopen.novel.core.common.resp.PageRespDto; import io.github.xxyopen.novel.core.common.resp.RestResp; import io.github.xxyopen.novel.core.constant.ApiRouterConsts; import io.github.xxyopen.novel.core.constant.SystemConfigConsts; @@ -8,6 +10,7 @@ import io.github.xxyopen.novel.dto.req.UserCommentReqDto; import io.github.xxyopen.novel.dto.req.UserInfoUptReqDto; import io.github.xxyopen.novel.dto.req.UserLoginReqDto; import io.github.xxyopen.novel.dto.req.UserRegisterReqDto; +import io.github.xxyopen.novel.dto.resp.UserCommentRespDto; import io.github.xxyopen.novel.dto.resp.UserInfoRespDto; import io.github.xxyopen.novel.dto.resp.UserLoginRespDto; import io.github.xxyopen.novel.dto.resp.UserRegisterRespDto; @@ -19,14 +22,7 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 前台门户-会员模块 API 控制器 @@ -138,4 +134,13 @@ public class UserController { return userService.getBookshelfStatus(UserHolder.getUserId(), bookId); } + /** + * 分页查询评论 + */ + @Operation(summary = "查询会员评论列表接口") + @GetMapping("comments") + public RestResp> listComments(PageReqDto pageReqDto) { + return bookService.listComments(UserHolder.getUserId(), pageReqDto); + } + } diff --git a/src/main/java/io/github/xxyopen/novel/dto/resp/UserCommentRespDto.java b/src/main/java/io/github/xxyopen/novel/dto/resp/UserCommentRespDto.java new file mode 100644 index 0000000..3e44524 --- /dev/null +++ b/src/main/java/io/github/xxyopen/novel/dto/resp/UserCommentRespDto.java @@ -0,0 +1,33 @@ +package io.github.xxyopen.novel.dto.resp; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 用户评论响应 Dto + * + * @author xiongxiaoyang + * @date 2023/4/25 + */ +@Data +@Builder +public class UserCommentRespDto { + + @Schema(description = "评论内容") + private String commentContent; + + @Schema(description = "评论小说封面") + private String commentBookPic; + + @Schema(description = "评论小说") + private String commentBook; + + @Schema(description = "评论时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime commentTime; + +} diff --git a/src/main/java/io/github/xxyopen/novel/service/BookService.java b/src/main/java/io/github/xxyopen/novel/service/BookService.java index 4779dc1..efda4af 100644 --- a/src/main/java/io/github/xxyopen/novel/service/BookService.java +++ b/src/main/java/io/github/xxyopen/novel/service/BookService.java @@ -179,4 +179,14 @@ public interface BookService { * @return 章节分页列表数据 */ RestResp> listBookChapters(Long bookId, PageReqDto dto); + + /** + * 分页查询评论 + * + * @param userId 会员ID + * @param pageReqDto 分页参数 + * @return 评论分页列表数据 + */ + RestResp> listComments(Long userId, PageReqDto pageReqDto); + } diff --git a/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java b/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java index b570c7e..7fdd0e8 100644 --- a/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java +++ b/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java @@ -11,11 +11,7 @@ import io.github.xxyopen.novel.core.common.req.PageReqDto; import io.github.xxyopen.novel.core.common.resp.PageRespDto; import io.github.xxyopen.novel.core.common.resp.RestResp; import io.github.xxyopen.novel.core.constant.DatabaseConsts; -import io.github.xxyopen.novel.dao.entity.BookChapter; -import io.github.xxyopen.novel.dao.entity.BookComment; -import io.github.xxyopen.novel.dao.entity.BookContent; -import io.github.xxyopen.novel.dao.entity.BookInfo; -import io.github.xxyopen.novel.dao.entity.UserInfo; +import io.github.xxyopen.novel.dao.entity.*; import io.github.xxyopen.novel.dao.mapper.BookChapterMapper; import io.github.xxyopen.novel.dao.mapper.BookCommentMapper; import io.github.xxyopen.novel.dao.mapper.BookContentMapper; @@ -24,38 +20,23 @@ import io.github.xxyopen.novel.dto.AuthorInfoDto; import io.github.xxyopen.novel.dto.req.BookAddReqDto; import io.github.xxyopen.novel.dto.req.ChapterAddReqDto; import io.github.xxyopen.novel.dto.req.UserCommentReqDto; -import io.github.xxyopen.novel.dto.resp.BookCategoryRespDto; -import io.github.xxyopen.novel.dto.resp.BookChapterAboutRespDto; -import io.github.xxyopen.novel.dto.resp.BookChapterRespDto; -import io.github.xxyopen.novel.dto.resp.BookCommentRespDto; -import io.github.xxyopen.novel.dto.resp.BookContentAboutRespDto; -import io.github.xxyopen.novel.dto.resp.BookInfoRespDto; -import io.github.xxyopen.novel.dto.resp.BookRankRespDto; -import io.github.xxyopen.novel.manager.cache.AuthorInfoCacheManager; -import io.github.xxyopen.novel.manager.cache.BookCategoryCacheManager; -import io.github.xxyopen.novel.manager.cache.BookChapterCacheManager; -import io.github.xxyopen.novel.manager.cache.BookContentCacheManager; -import io.github.xxyopen.novel.manager.cache.BookInfoCacheManager; -import io.github.xxyopen.novel.manager.cache.BookRankCacheManager; +import io.github.xxyopen.novel.dto.resp.*; +import io.github.xxyopen.novel.manager.cache.*; import io.github.xxyopen.novel.manager.dao.UserDaoManager; import io.github.xxyopen.novel.manager.mq.AmqpMsgManager; import io.github.xxyopen.novel.service.BookService; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Random; -import java.util.function.Function; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.time.LocalDateTime; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 小说模块 服务实现类 @@ -427,6 +408,35 @@ public class BookServiceImpl implements BookService { .build()).toList())); } + @Override + public RestResp> listComments(Long userId, PageReqDto pageReqDto) { + IPage page = new Page<>(); + page.setCurrent(pageReqDto.getPageNum()); + page.setSize(pageReqDto.getPageSize()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(DatabaseConsts.BookCommentTable.COLUMN_USER_ID, userId) + .orderByDesc(DatabaseConsts.CommonColumnEnum.UPDATE_TIME.getName()); + IPage bookCommentPage = bookCommentMapper.selectPage(page, queryWrapper); + List comments = bookCommentPage.getRecords(); + if (!CollectionUtils.isEmpty(comments)) { + List bookIds = comments.stream().map(BookComment::getBookId).toList(); + QueryWrapper bookInfoQueryWrapper = new QueryWrapper<>(); + bookInfoQueryWrapper.in(DatabaseConsts.CommonColumnEnum.ID.getName(), bookIds); + Map bookInfoMap = bookInfoMapper.selectList(bookInfoQueryWrapper).stream() + .collect(Collectors.toMap(BookInfo::getId, Function.identity())); + return RestResp.ok(PageRespDto.of(pageReqDto.getPageNum(), pageReqDto.getPageSize(), page.getTotal(), + comments.stream().map(v -> UserCommentRespDto.builder() + .commentContent(v.getCommentContent()) + .commentBook(bookInfoMap.get(v.getBookId()).getBookName()) + .commentBookPic(bookInfoMap.get(v.getBookId()).getPicUrl()) + .commentTime(v.getCreateTime()) + .build()).toList())); + + } + return RestResp.ok(PageRespDto.of(pageReqDto.getPageNum(), pageReqDto.getPageSize(), page.getTotal(), + Collections.emptyList())); + } + @Override public RestResp getBookContentAbout(Long chapterId) { log.debug("userId:{}", UserHolder.getUserId());