diff --git a/aurora-springboot/src/main/java/com/aurora/service/impl/CommentServiceImpl.java b/aurora-springboot/src/main/java/com/aurora/service/impl/CommentServiceImpl.java index 0805069..efbb7d7 100644 --- a/aurora-springboot/src/main/java/com/aurora/service/impl/CommentServiceImpl.java +++ b/aurora-springboot/src/main/java/com/aurora/service/impl/CommentServiceImpl.java @@ -2,7 +2,10 @@ package com.aurora.service.impl; import com.alibaba.fastjson.JSON; import com.aurora.dto.*; +import com.aurora.entity.Article; import com.aurora.entity.Comment; +import com.aurora.entity.Talk; +import com.aurora.entity.UserInfo; import com.aurora.enums.CommentTypeEnum; import com.aurora.exception.BizException; import com.aurora.mapper.ArticleMapper; @@ -37,8 +40,7 @@ import java.util.stream.Collectors; import static com.aurora.constant.CommonConst.*; import static com.aurora.constant.MQPrefixConst.EMAIL_EXCHANGE; -import static com.aurora.enums.CommentTypeEnum.getCommentEnum; -import static com.aurora.enums.CommentTypeEnum.getCommentPath; +import static com.aurora.enums.CommentTypeEnum.*; @Service public class CommentServiceImpl extends ServiceImpl implements CommentService { @@ -76,9 +78,7 @@ public class CommentServiceImpl extends ServiceImpl impl @Override public void saveComment(CommentVO commentVO) { - if (!types.contains(commentVO.getType())) { - throw new BizException("评论类型不存在!"); - } + checkCommentVO(commentVO); WebsiteConfigDTO websiteConfig = auroraInfoService.getWebsiteConfig(); Integer isCommentReview = websiteConfig.getIsCommentReview(); commentVO.setCommentContent(HTMLUtils.filter(commentVO.getCommentContent())); @@ -151,6 +151,70 @@ public class CommentServiceImpl extends ServiceImpl impl this.updateBatchById(comments); } + public void checkCommentVO(CommentVO commentVO) { + // 校验评论类型是否存在 + if (!types.contains(commentVO.getType())) { + throw new BizException("参数校验异常"); + } + // 类型为文章和说说时,类型id不能为空,且判断文章或说说是否存在 + if (Objects.requireNonNull(getCommentEnum(commentVO.getType())) == ARTICLE || Objects.requireNonNull(getCommentEnum(commentVO.getType())) == TALK) { + // 类型id为空则报异常 + if (Objects.isNull(commentVO.getTopicId())) { + throw new BizException("参数校验异常"); + } else { + // 类型id不为空判断文章是否存在 + if (Objects.requireNonNull(getCommentEnum(commentVO.getType())) == ARTICLE) { + Article article = articleMapper.selectOne(new LambdaQueryWrapper
().select(Article::getId, Article::getUserId).eq(Article::getId, commentVO.getTopicId())); + if (Objects.isNull(article)) { + throw new BizException("参数校验异常"); + } + } + // 类型id不为空判断说说是否存在 + if (Objects.requireNonNull(getCommentEnum(commentVO.getType())) == TALK) { + Talk talk = talkMapper.selectOne(new LambdaQueryWrapper().select(Talk::getId, Talk::getUserId).eq(Talk::getId, commentVO.getTopicId())); + if (Objects.isNull(talk)) { + throw new BizException("参数校验异常"); + } + } + } + } + // 类型为友链,about,留言时,topicId必须为空 + if (Objects.requireNonNull(getCommentEnum(commentVO.getType())) == LINK + || Objects.requireNonNull(getCommentEnum(commentVO.getType())) == ABOUT + || Objects.requireNonNull(getCommentEnum(commentVO.getType())) == MESSAGE) { + if (Objects.nonNull(commentVO.getTopicId())) { + throw new BizException("参数校验异常"); + } + } + // 父评论时 replyUserId 为空 + if (Objects.isNull(commentVO.getParentId())) { + if (Objects.nonNull(commentVO.getReplyUserId())) { + throw new BizException("参数校验异常"); + } + } + // 子评论时 + if (Objects.nonNull(commentVO.getParentId())) { + Comment parentComment = commentMapper.selectOne(new LambdaQueryWrapper().select(Comment::getId, Comment::getParentId, Comment::getType).eq(Comment::getId, commentVO.getParentId())); + if (Objects.isNull(parentComment)) { + throw new BizException("参数校验异常"); + } + if (Objects.nonNull(parentComment.getParentId())) { + throw new BizException("参数校验异常"); + } + if (!commentVO.getType().equals(parentComment.getType())) { + throw new BizException("参数校验异常"); + } + if (Objects.isNull(commentVO.getReplyUserId())) { + throw new BizException("参数校验异常"); + } else { + UserInfo existUser = userInfoMapper.selectOne(new LambdaQueryWrapper().select(UserInfo::getId).eq(UserInfo::getId, commentVO.getReplyUserId())); + if (Objects.isNull(existUser)) { + throw new BizException("参数校验异常"); + } + } + } + } + public void notice(Comment comment) { // 查询回复用户邮箱号 Integer userId = BLOGGER_ID;