From db38fe819c005f7f850ef0b32f79ba9ae3763c4f Mon Sep 17 00:00:00 2001 From: ziin Date: Fri, 20 Mar 2026 17:14:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(ai-companion-comment):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=88=A0=E9=99=A4=E8=AF=84=E8=AE=BA=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96VO=E5=AD=97=E6=AE=B5=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AiCompanionCommentController.java | 13 ++++ .../model/dto/comment/CommentDeleteReq.java | 16 +++++ .../com/yolo/keyborad/model/vo/CommentVO.java | 3 + .../KeyboardAiCompanionCommentService.java | 8 +++ ...KeyboardAiCompanionCommentServiceImpl.java | 60 +++++++++++++++++-- 5 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/yolo/keyborad/model/dto/comment/CommentDeleteReq.java diff --git a/src/main/java/com/yolo/keyborad/controller/AiCompanionCommentController.java b/src/main/java/com/yolo/keyborad/controller/AiCompanionCommentController.java index bb7eb28..6310a76 100644 --- a/src/main/java/com/yolo/keyborad/controller/AiCompanionCommentController.java +++ b/src/main/java/com/yolo/keyborad/controller/AiCompanionCommentController.java @@ -8,6 +8,7 @@ import com.yolo.keyborad.common.ErrorCode; import com.yolo.keyborad.common.ResultUtils; import com.yolo.keyborad.exception.BusinessException; import com.yolo.keyborad.model.dto.comment.CommentAddReq; +import com.yolo.keyborad.model.dto.comment.CommentDeleteReq; import com.yolo.keyborad.model.dto.comment.CommentLikeReq; import com.yolo.keyborad.model.dto.comment.CommentPageReq; import com.yolo.keyborad.model.dto.comment.CommentReportReq; @@ -56,6 +57,18 @@ public class AiCompanionCommentController { return ResultUtils.success(commentId); } + @PostMapping("/delete") + @Operation(summary = "删除评论", description = "删除当前用户自己发布的评论;若删除根评论,其下回复将不会继续展示") + public BaseResponse deleteComment(@RequestBody CommentDeleteReq req) { + if (req == null || req.getCommentId() == null) { + throw new BusinessException(ErrorCode.COMMENT_ID_EMPTY); + } + + Long userId = StpUtil.getLoginIdAsLong(); + commentService.deleteComment(userId, req.getCommentId()); + return ResultUtils.success(true); + } + @PostMapping("/page") @Operation(summary = "分页查询评论", description = "分页查询AI陪聊角色的评论列表,包含当前用户是否已点赞状态") public BaseResponse> pageComments(@RequestBody CommentPageReq req) { diff --git a/src/main/java/com/yolo/keyborad/model/dto/comment/CommentDeleteReq.java b/src/main/java/com/yolo/keyborad/model/dto/comment/CommentDeleteReq.java new file mode 100644 index 0000000..99cbac4 --- /dev/null +++ b/src/main/java/com/yolo/keyborad/model/dto/comment/CommentDeleteReq.java @@ -0,0 +1,16 @@ +package com.yolo.keyborad.model.dto.comment; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/* + * @author: ziin + * @date: 2026/3/20 + */ +@Data +@Schema(description = "删除评论请求") +public class CommentDeleteReq { + + @Schema(description = "评论ID", requiredMode = Schema.RequiredMode.REQUIRED) + private Long commentId; +} diff --git a/src/main/java/com/yolo/keyborad/model/vo/CommentVO.java b/src/main/java/com/yolo/keyborad/model/vo/CommentVO.java index 85bf8a0..6366adf 100644 --- a/src/main/java/com/yolo/keyborad/model/vo/CommentVO.java +++ b/src/main/java/com/yolo/keyborad/model/vo/CommentVO.java @@ -23,6 +23,9 @@ public class CommentVO { @Schema(description = "发表评论的用户ID") private Long userId; + @Schema(description = "发表评论的用户UID") + private Long userUid; + @Schema(description = "用户昵称") private String userName; diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardAiCompanionCommentService.java b/src/main/java/com/yolo/keyborad/service/KeyboardAiCompanionCommentService.java index ccefeef..53011d9 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardAiCompanionCommentService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardAiCompanionCommentService.java @@ -23,6 +23,14 @@ public interface KeyboardAiCompanionCommentService extends IService implements KeyboardAiCompanionCommentService { + private static final short ACTIVE_STATUS = 1; + + private static final short DELETED_STATUS = -1; + + private static final long MAX_REPLY_PREVIEW_COUNT = 999L; + @Resource private UserService userService; @@ -43,19 +53,27 @@ public class KeyboardAiCompanionCommentServiceImpl extends ServiceImpl pageComments(Long companionId, Integer pageNum, Integer pageSize) { Page page = new Page<>(pageNum, pageSize); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(KeyboardAiCompanionComment::getCompanionId, companionId) - .eq(KeyboardAiCompanionComment::getStatus, 1) + .eq(KeyboardAiCompanionComment::getStatus, ACTIVE_STATUS) .isNull(KeyboardAiCompanionComment::getParentId) .orderByDesc(KeyboardAiCompanionComment::getCreatedAt); IPage entityPage = this.page(page, queryWrapper); @@ -87,7 +105,7 @@ public class KeyboardAiCompanionCommentServiceImpl extends ServiceImpl page = new Page<>(pageNum, pageSize); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(KeyboardAiCompanionComment::getCompanionId, companionId) - .eq(KeyboardAiCompanionComment::getStatus, 1) + .eq(KeyboardAiCompanionComment::getStatus, ACTIVE_STATUS) .isNull(KeyboardAiCompanionComment::getParentId) .orderByDesc(KeyboardAiCompanionComment::getCreatedAt); IPage entityPage = this.page(page, queryWrapper); @@ -105,7 +123,7 @@ public class KeyboardAiCompanionCommentServiceImpl extends ServiceImpl replyWrapper = new LambdaQueryWrapper<>(); replyWrapper.in(KeyboardAiCompanionComment::getRootId, topCommentIds) - .eq(KeyboardAiCompanionComment::getStatus, 1) + .eq(KeyboardAiCompanionComment::getStatus, ACTIVE_STATUS) .orderByAsc(KeyboardAiCompanionComment::getCreatedAt); allReplies = this.list(replyWrapper); @@ -121,7 +139,7 @@ public class KeyboardAiCompanionCommentServiceImpl extends ServiceImpl e.getValue().stream().limit(999).collect(Collectors.toList()) + e -> e.getValue().stream().limit(MAX_REPLY_PREVIEW_COUNT).collect(Collectors.toList()) )); } @@ -178,6 +196,35 @@ public class KeyboardAiCompanionCommentServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(KeyboardAiCompanionComment::getId, commentId) + .eq(KeyboardAiCompanionComment::getStatus, ACTIVE_STATUS); + + boolean updated = this.update(updateEntity, updateWrapper); + if (!updated) { + throw new BusinessException(ErrorCode.OPERATION_ERROR, "删除评论失败"); + } + } + /** * 将评论实体转换为VO */ @@ -201,6 +248,7 @@ public class KeyboardAiCompanionCommentServiceImpl extends ServiceImpl