From e1aa1ce4e81ccc76fafe34b3c4c7832733c1ac0f Mon Sep 17 00:00:00 2001 From: ziin Date: Wed, 28 Jan 2026 15:57:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(service):=20=E6=96=B0=E5=A2=9E=E6=A0=B9?= =?UTF-8?q?=E6=8D=AEID=E8=8E=B7=E5=8F=96AI=E8=A7=92=E8=89=B2=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AiCompanionController.java | 11 ++++++ .../service/KeyboardAiCompanionService.java | 9 +++++ .../impl/KeyboardAiCompanionServiceImpl.java | 35 +++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/src/main/java/com/yolo/keyborad/controller/AiCompanionController.java b/src/main/java/com/yolo/keyborad/controller/AiCompanionController.java index 7e344b7..a979c2f 100644 --- a/src/main/java/com/yolo/keyborad/controller/AiCompanionController.java +++ b/src/main/java/com/yolo/keyborad/controller/AiCompanionController.java @@ -70,4 +70,15 @@ public class AiCompanionController { List result = aiCompanionService.getChattedCompanions(userId); return ResultUtils.success(result); } + + @GetMapping("/{companionId}") + @Operation(summary = "根据ID获取AI角色详情", description = "根据AI角色ID查询角色详细信息,包含点赞数、评论数和当前用户点赞状态") + public BaseResponse getCompanionById(@PathVariable Long companionId) { + if (companionId == null) { + throw new BusinessException(ErrorCode.COMPANION_ID_EMPTY); + } + Long userId = StpUtil.getLoginIdAsLong(); + AiCompanionVO result = aiCompanionService.getCompanionById(userId, companionId); + return ResultUtils.success(result); + } } diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardAiCompanionService.java b/src/main/java/com/yolo/keyborad/service/KeyboardAiCompanionService.java index bfeeb70..8ebad84 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardAiCompanionService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardAiCompanionService.java @@ -55,4 +55,13 @@ public interface KeyboardAiCompanionService extends IService getChattedCompanions(Long userId); + + /** + * 根据ID获取AI角色详情(带点赞数、评论数和当前用户点赞状态) + * + * @param userId 当前用户ID + * @param companionId AI角色ID + * @return AI角色详情 + */ + AiCompanionVO getCompanionById(Long userId, Long companionId); } diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiCompanionServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiCompanionServiceImpl.java index 8989f77..fee1b69 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiCompanionServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiCompanionServiceImpl.java @@ -262,4 +262,39 @@ public class KeyboardAiCompanionServiceImpl extends ServiceImpl likeWrapper = new LambdaQueryWrapper<>(); + likeWrapper.eq(KeyboardAiCompanionLike::getCompanionId, companionId) + .eq(KeyboardAiCompanionLike::getStatus, (short) 1); + long likeCount = companionLikeService.count(likeWrapper); + + // 统计评论数 + LambdaQueryWrapper commentWrapper = new LambdaQueryWrapper<>(); + commentWrapper.eq(KeyboardAiCompanionComment::getCompanionId, companionId) + .eq(KeyboardAiCompanionComment::getStatus, (short) 1); + long commentCount = companionCommentService.count(commentWrapper); + + // 获取当前用户点赞状态 + boolean liked = companionLikeService.hasLiked(userId, companionId); + + // 转换为VO + AiCompanionVO vo = BeanUtil.copyProperties(companion, AiCompanionVO.class); + vo.setLikeCount((int) likeCount); + vo.setCommentCount((int) commentCount); + vo.setLiked(liked); + + return vo; + } }