feat(novel-front): 增加评论回复功能

This commit is contained in:
xiongxiaoyang
2025-07-12 11:15:35 +08:00
parent 8c572edb10
commit 02fb819120
16 changed files with 465 additions and 47 deletions

View File

@ -3,17 +3,11 @@ package com.java2nb.novel.controller;
import com.java2nb.novel.core.bean.UserDetails;
import com.java2nb.novel.core.enums.ResponseStatus;
import com.java2nb.novel.core.utils.IpUtil;
import com.java2nb.novel.entity.Book;
import com.java2nb.novel.entity.BookCategory;
import com.java2nb.novel.entity.BookComment;
import com.java2nb.novel.entity.BookIndex;
import com.java2nb.novel.entity.*;
import com.java2nb.novel.service.BookContentService;
import com.java2nb.novel.service.BookService;
import com.java2nb.novel.service.IpLocationService;
import com.java2nb.novel.vo.BookCommentVO;
import com.java2nb.novel.vo.BookSettingVO;
import com.java2nb.novel.vo.BookSpVO;
import com.java2nb.novel.vo.BookVO;
import com.java2nb.novel.vo.*;
import io.github.xxyopen.model.page.PageBean;
import io.github.xxyopen.model.page.builder.pagehelper.PageBuilder;
import io.github.xxyopen.model.resp.RestResult;
@ -153,6 +147,16 @@ public class BookController extends BaseController {
return RestResult.ok(bookService.listCommentByPage(null, bookId, page, pageSize));
}
/**
* 分页查询评论回复列表
*/
@GetMapping("listCommentReplyByPage")
public RestResult<PageBean<BookCommentReplyVO>> listCommentReplyByPage(@RequestParam("commentId") Long commentId,
@RequestParam(value = "curr", defaultValue = "1") int page,
@RequestParam(value = "limit", defaultValue = "5") int pageSize) {
return RestResult.ok(bookService.listCommentReplyByPage(null, commentId, page, pageSize));
}
/**
* 新增评价
*/
@ -167,6 +171,20 @@ public class BookController extends BaseController {
return RestResult.ok();
}
/**
* 新增回复
*/
@PostMapping("addCommentReply")
public RestResult<?> addCommentReply(BookCommentReply commentReply, HttpServletRequest request) {
UserDetails userDetails = getUserDetails(request);
if (userDetails == null) {
return RestResult.fail(ResponseStatus.NO_LOGIN);
}
commentReply.setLocation(ipLocationService.getLocation(IpUtil.getRealIp(request)));
bookService.addBookCommentReply(userDetails.getId(), commentReply);
return RestResult.ok();
}
/**
* 根据小说ID查询小说前十条最新更新目录集合
*/

View File

@ -313,6 +313,16 @@ public class PageController extends BaseController {
return "book/book_comment";
}
/**
* 评论回复页面
*/
@RequestMapping("/book/reply-{commentId}.html")
public String commentReplyList(@PathVariable("commentId") Long commentId, Model model) {
model.addAttribute("commentId", commentId);
model.addAttribute("commentContent", bookService.getBookComment(commentId).getCommentContent());
return "book/book_comment_reply";
}
/**
* 新闻内容页面
*/

View File

@ -12,4 +12,5 @@ public interface FrontBookCommentMapper extends BookCommentMapper {
List<BookCommentVO> listCommentByPage(@Param("userId") Long userId, @Param("bookId") Long bookId);
void addReplyCount(@Param("commentId") Long commentId);
}

View File

@ -0,0 +1,16 @@
package com.java2nb.novel.mapper;
import com.java2nb.novel.vo.BookCommentReplyVO;
import com.java2nb.novel.vo.BookCommentVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Administrator
*/
public interface FrontBookCommentReplyMapper extends BookCommentReplyMapper {
List<BookCommentReplyVO> listCommentReplyByPage(@Param("userId") Long userId, @Param("commentId") Long commentId);
}

View File

@ -1,12 +1,9 @@
package com.java2nb.novel.service;
import com.java2nb.novel.vo.*;
import io.github.xxyopen.model.page.PageBean;
import com.java2nb.novel.entity.*;
import com.java2nb.novel.vo.BookCommentVO;
import com.java2nb.novel.vo.BookSettingVO;
import com.java2nb.novel.vo.BookSpVO;
import com.java2nb.novel.vo.BookVO;
import java.util.Date;
import java.util.List;
@ -295,4 +292,15 @@ public interface BookService {
* 查询AI生成图片
*/
String queryAiGenPic(Long bookId);
/**
* 新增回复
* @param userId 用户ID
* @param commentReply 回复内容
* */
void addBookCommentReply(Long userId, BookCommentReply commentReply);
PageBean<BookCommentReplyVO> listCommentReplyByPage(Long userId, Long commentId, int page, int pageSize);
BookComment getBookComment(Long commentId);
}

View File

@ -15,10 +15,7 @@ import com.java2nb.novel.mapper.*;
import com.java2nb.novel.service.AuthorService;
import com.java2nb.novel.service.BookService;
import com.java2nb.novel.service.FileService;
import com.java2nb.novel.vo.BookCommentVO;
import com.java2nb.novel.vo.BookSettingVO;
import com.java2nb.novel.vo.BookSpVO;
import com.java2nb.novel.vo.BookVO;
import com.java2nb.novel.vo.*;
import io.github.xxyopen.model.page.PageBean;
import io.github.xxyopen.model.page.builder.pagehelper.PageBuilder;
import io.github.xxyopen.util.IdWorker;
@ -87,6 +84,8 @@ public class BookServiceImpl implements BookService {
private final FrontBookCommentMapper bookCommentMapper;
private final FrontBookCommentReplyMapper bookCommentReplyMapper;
private final BookAuthorMapper bookAuthorMapper;
private final CacheService cacheService;
@ -888,5 +887,27 @@ public class BookServiceImpl implements BookService {
return cacheService.get(CacheKey.AI_GEN_PIC + bookId);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void addBookCommentReply(Long userId, BookCommentReply commentReply) {
//增加回复
commentReply.setCreateUserId(userId);
commentReply.setCreateTime(new Date());
bookCommentReplyMapper.insertSelective(commentReply);
//增加评论回复数
bookCommentMapper.addReplyCount(commentReply.getCommentId());
}
@Override
public PageBean<BookCommentReplyVO> listCommentReplyByPage(Long userId, Long commentId, int page, int pageSize) {
PageHelper.startPage(page, pageSize);
return PageBuilder.build(bookCommentReplyMapper.listCommentReplyByPage(userId, commentId));
}
@Override
public BookComment getBookComment(Long commentId) {
return bookCommentMapper.selectByPrimaryKey(commentId).orElse(null);
}
}

View File

@ -0,0 +1,30 @@
package com.java2nb.novel.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.java2nb.novel.core.serialize.CommentUserNameSerialize;
import com.java2nb.novel.entity.BookComment;
import com.java2nb.novel.entity.BookCommentReply;
import lombok.Data;
import java.util.Date;
/**
* @author 11797
*/
@Data
public class BookCommentReplyVO extends BookCommentReply {
@JsonSerialize(using = CommentUserNameSerialize.class)
private String createUserName;
private String createUserPhoto;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@Override
public String toString() {
return super.toString();
}
}