Browse Source

0612 书籍评论功能

Qing 1 year ago
parent
commit
061c2226e3

+ 42 - 0
novel-demo/src/main/java/com/sf/controller/BookCommentController.java

@@ -0,0 +1,42 @@
+package com.sf.controller;
+
+import com.sf.dto.RestResp;
+import com.sf.dto.req.UserCommentReqDto;
+import com.sf.dto.resp.BookCommentRespDto;
+import com.sf.service.IBookCommentService;
+import com.sf.util.UserHolder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 小说评论 前端控制器
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-12
+ */
+@RestController
+//@RequestMapping("/bookComment")
+public class BookCommentController {
+
+    @Autowired
+    private IBookCommentService bookCommentService;
+
+    // http://127.0.0.1:8888/api/front/book/comment/newest_list?bookId=1431630596354977795
+    @GetMapping("/api/front/book/comment/newest_list")
+    public RestResp<BookCommentRespDto> commentNewestList(@RequestParam("bookId") Long bookId) {
+        BookCommentRespDto bookCommentRespDto = bookCommentService.commentNewestList(bookId);
+        return RestResp.ok(bookCommentRespDto);
+    }
+
+
+    // http://127.0.0.1:8888/api/front/user/comment
+    @PostMapping("/api/front/user/comment")
+    public RestResp<Void> addComment(@RequestBody UserCommentReqDto userCommentReqDto) {
+        userCommentReqDto.setUserId(UserHolder.getUserId());
+        bookCommentService.saveComment(userCommentReqDto);
+        return RestResp.ok(null);
+    }
+}

+ 22 - 0
novel-demo/src/main/java/com/sf/dto/req/UserCommentReqDto.java

@@ -0,0 +1,22 @@
+package com.sf.dto.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class UserCommentReqDto {
+
+    private Long userId;
+
+    @Schema(description = "小说ID", required = true)
+    @NotNull(message="小说ID不能为空!")
+    private Long bookId;
+
+    @Schema(description = "评论内容", required = true)
+    @NotBlank(message="评论不能为空!")
+//    @Length(min = 10,max = 512)
+    private String commentContent;
+
+}

+ 27 - 0
novel-demo/src/main/java/com/sf/dto/resp/BookCommentRespDto.java

@@ -0,0 +1,27 @@
+package com.sf.dto.resp;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 小说评论 响应DTO
+ * @author xiongxiaoyang
+ * @date 2022/5/17
+ */
+@Data
+@Builder
+public class BookCommentRespDto {
+
+    @Schema(description = "评论总数")
+    private Long commentTotal;
+
+    @Schema(description = "评论列表")
+    private List<CommentInfoRespDto> comments;
+
+}

+ 32 - 0
novel-demo/src/main/java/com/sf/dto/resp/CommentInfoRespDto.java

@@ -0,0 +1,32 @@
+package com.sf.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;
+
+@Data
+@Builder
+public class CommentInfoRespDto {
+
+    @Schema(description = "评论ID")
+    private Long id;
+
+    @Schema(description = "评论内容")
+    private String commentContent;
+
+    @Schema(description = "评论用户")
+    private String commentUser;
+
+    @Schema(description = "评论用户ID")
+    private Long commentUserId;
+
+    @Schema(description = "评论用户头像")
+    private String commentUserPhoto;
+
+    @Schema(description = "评论时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime commentTime;
+}

+ 147 - 0
novel-demo/src/main/java/com/sf/entity/BookComment.java

@@ -0,0 +1,147 @@
+package com.sf.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 小说评论
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-12
+ */
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("book_comment")
+public class BookComment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 评论小说ID
+     */
+    private Long bookId;
+
+    /**
+     * 评论用户ID
+     */
+    private Long userId;
+
+    /**
+     * 评价内容
+     */
+    private String commentContent;
+
+    /**
+     * 回复数量
+     */
+    private Integer replyCount;
+
+    /**
+     * 审核状态;0-待审核 1-审核通过 2-审核不通过
+     */
+    private Byte auditStatus;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getBookId() {
+        return bookId;
+    }
+
+    public void setBookId(Long bookId) {
+        this.bookId = bookId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getCommentContent() {
+        return commentContent;
+    }
+
+    public void setCommentContent(String commentContent) {
+        this.commentContent = commentContent;
+    }
+
+    public Integer getReplyCount() {
+        return replyCount;
+    }
+
+    public void setReplyCount(Integer replyCount) {
+        this.replyCount = replyCount;
+    }
+
+    public Byte getAuditStatus() {
+        return auditStatus;
+    }
+
+    public void setAuditStatus(Byte auditStatus) {
+        this.auditStatus = auditStatus;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public LocalDateTime getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(LocalDateTime updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "BookComment{" +
+            "id = " + id +
+            ", bookId = " + bookId +
+            ", userId = " + userId +
+            ", commentContent = " + commentContent +
+            ", replyCount = " + replyCount +
+            ", auditStatus = " + auditStatus +
+            ", createTime = " + createTime +
+            ", updateTime = " + updateTime +
+        "}";
+    }
+}

+ 16 - 0
novel-demo/src/main/java/com/sf/mapper/BookCommentMapper.java

@@ -0,0 +1,16 @@
+package com.sf.mapper;
+
+import com.sf.entity.BookComment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 小说评论 Mapper 接口
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-12
+ */
+public interface BookCommentMapper extends BaseMapper<BookComment> {
+
+}

+ 23 - 0
novel-demo/src/main/java/com/sf/service/IBookCommentService.java

@@ -0,0 +1,23 @@
+package com.sf.service;
+
+import com.sf.dto.req.UserCommentReqDto;
+import com.sf.dto.resp.BookCommentRespDto;
+import com.sf.entity.BookComment;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * <p>
+ * 小说评论 服务类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-12
+ */
+public interface IBookCommentService extends IService<BookComment> {
+
+    BookCommentRespDto commentNewestList(Long bookId);
+
+    void saveComment(UserCommentReqDto userCommentReqDto);
+
+}

+ 81 - 0
novel-demo/src/main/java/com/sf/service/impl/BookCommentServiceImpl.java

@@ -0,0 +1,81 @@
+package com.sf.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sf.dto.req.UserCommentReqDto;
+import com.sf.dto.resp.BookCommentRespDto;
+import com.sf.dto.resp.CommentInfoRespDto;
+import com.sf.entity.BookComment;
+import com.sf.entity.UserInfo;
+import com.sf.mapper.BookCommentMapper;
+import com.sf.mapper.UserInfoMapper;
+import com.sf.service.IBookCommentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 小说评论 服务实现类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-12
+ */
+@Service
+public class BookCommentServiceImpl extends ServiceImpl<BookCommentMapper, BookComment> implements IBookCommentService {
+
+    @Autowired
+    private BookCommentMapper bookCommentMapper;
+
+    @Autowired
+    private UserInfoMapper userInfoMapper;
+
+    @Override
+    public BookCommentRespDto commentNewestList(Long bookId) {
+        // select count(*) from book_comment where book_id = ''
+        LambdaQueryWrapper<BookComment> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BookComment::getBookId, bookId);
+//        Long count = bookCommentMapper.selectCount(queryWrapper);
+
+        // select * from book_comment where book_id = ''
+        List<BookComment> bookComments = bookCommentMapper.selectList(queryWrapper);
+        int count = bookComments.size();
+
+        List<CommentInfoRespDto> commentInfoRespDtoList = new ArrayList<>();
+        for (BookComment bookComment : bookComments) {
+            // select * from user_info where id = ''
+            UserInfo userInfo = userInfoMapper.selectById(bookComment.getUserId());
+            CommentInfoRespDto commentInfoRespDto = CommentInfoRespDto.builder()
+                    .id(bookComment.getId()).commentContent(bookComment.getCommentContent())
+                    .commentUserId(bookComment.getUserId())
+                    .commentUser(userInfo.getUsername())
+                    .commentUserPhoto(userInfo.getUserPhoto())
+                    .commentTime(bookComment.getUpdateTime())
+                    .build();
+            commentInfoRespDtoList.add(commentInfoRespDto);
+        }
+
+        BookCommentRespDto bookCommentRespDto = BookCommentRespDto.builder()
+                .commentTotal((long)count)
+                .comments(commentInfoRespDtoList)
+                .build();
+
+        return bookCommentRespDto;
+    }
+
+    @Override
+    public void saveComment(UserCommentReqDto userCommentReqDto) {
+        BookComment bookComment = BookComment.builder()
+                .bookId(userCommentReqDto.getBookId())
+                .userId(userCommentReqDto.getUserId())
+                .commentContent(userCommentReqDto.getCommentContent())
+                .createTime(LocalDateTime.now())
+                .updateTime(LocalDateTime.now())
+                .build();
+        bookCommentMapper.insert(bookComment);
+    }
+}

+ 2 - 1
novel-demo/src/main/java/com/sf/util/GeneUtils.java

@@ -23,7 +23,8 @@ public class GeneUtils {
 //        list.add("news_content"); // 新闻内容表
 //        list.add("news_content"); // 新闻内容表
 //        list.add("book_category"); // 书籍种类表
 //        list.add("book_category"); // 书籍种类表
 //        list.add("home_friend_link"); // 首页友情链接表
 //        list.add("home_friend_link"); // 首页友情链接表
-        list.add("user_info"); // 用户信息表
+//        list.add("user_info"); // 用户信息表
+        list.add("book_comment"); // 书籍评论表
 
 
         // 快速生成器
         // 快速生成器
         FastAutoGenerator.create("jdbc:mysql://localhost:3306/novel-cloud?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai",
         FastAutoGenerator.create("jdbc:mysql://localhost:3306/novel-cloud?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai",

+ 5 - 0
novel-demo/src/main/resources/mapper/BookCommentMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sf.mapper.BookCommentMapper">
+
+</mapper>