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