feat(ai-companion): 新增获取用户已点赞AI角色列表接口
This commit is contained in:
@@ -116,7 +116,8 @@ public class SaTokenConfigure implements WebMvcConfigurer {
|
|||||||
"/chat/history",
|
"/chat/history",
|
||||||
"/ai-companion/comment/add",
|
"/ai-companion/comment/add",
|
||||||
"/speech/transcribe",
|
"/speech/transcribe",
|
||||||
"/ai-companion/comment/page"
|
"/ai-companion/comment/page",
|
||||||
|
"/ai-companion/liked"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@Bean
|
@Bean
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ import jakarta.annotation.Resource;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author: ziin
|
* @author: ziin
|
||||||
* @date: 2026/1/26
|
* @date: 2026/1/26
|
||||||
@@ -52,4 +54,12 @@ public class AiCompanionController {
|
|||||||
boolean result = aiCompanionLikeService.toggleLike(userId, req.getCompanionId());
|
boolean result = aiCompanionLikeService.toggleLike(userId, req.getCompanionId());
|
||||||
return ResultUtils.success(result);
|
return ResultUtils.success(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/liked")
|
||||||
|
@Operation(summary = "获取当前用户点赞过的AI角色列表", description = "查询当前用户点赞过的所有AI角色,返回角色详细信息")
|
||||||
|
public BaseResponse<List<AiCompanionVO>> getLikedCompanions() {
|
||||||
|
Long userId = StpUtil.getLoginIdAsLong();
|
||||||
|
List<AiCompanionVO> result = aiCompanionService.getLikedCompanions(userId);
|
||||||
|
return ResultUtils.success(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,4 +38,12 @@ public interface KeyboardAiCompanionLikeService extends IService<KeyboardAiCompa
|
|||||||
* @return 已点赞的AI角色ID集合
|
* @return 已点赞的AI角色ID集合
|
||||||
*/
|
*/
|
||||||
Set<Long> getLikedCompanionIds(Long userId, List<Long> companionIds);
|
Set<Long> getLikedCompanionIds(Long userId, List<Long> companionIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户点赞过的所有AI角色ID列表
|
||||||
|
*
|
||||||
|
* @param userId 用户ID
|
||||||
|
* @return 已点赞的AI角色ID列表
|
||||||
|
*/
|
||||||
|
List<Long> getAllLikedCompanionIds(Long userId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import com.yolo.keyborad.model.entity.KeyboardAiCompanion;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.yolo.keyborad.model.vo.AiCompanionVO;
|
import com.yolo.keyborad.model.vo.AiCompanionVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author: ziin
|
* @author: ziin
|
||||||
* @date: 2026/1/26 13:51
|
* @date: 2026/1/26 13:51
|
||||||
@@ -37,4 +39,12 @@ public interface KeyboardAiCompanionService extends IService<KeyboardAiCompanion
|
|||||||
* @return 系统提示词
|
* @return 系统提示词
|
||||||
*/
|
*/
|
||||||
String getSystemPromptById(Long companionId);
|
String getSystemPromptById(Long companionId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户点赞过的AI角色列表
|
||||||
|
*
|
||||||
|
* @param userId 用户ID
|
||||||
|
* @return 点赞过的AI角色列表
|
||||||
|
*/
|
||||||
|
List<AiCompanionVO> getLikedCompanions(Long userId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,4 +100,16 @@ public class KeyboardAiCompanionLikeServiceImpl extends ServiceImpl<KeyboardAiCo
|
|||||||
|
|
||||||
return isLiked;
|
return isLiked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Long> getAllLikedCompanionIds(Long userId) {
|
||||||
|
LambdaQueryWrapper<KeyboardAiCompanionLike> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(KeyboardAiCompanionLike::getUserId, userId)
|
||||||
|
.eq(KeyboardAiCompanionLike::getStatus, (short) 1)
|
||||||
|
.select(KeyboardAiCompanionLike::getCompanionId);
|
||||||
|
List<KeyboardAiCompanionLike> likes = this.list(queryWrapper);
|
||||||
|
return likes.stream()
|
||||||
|
.map(KeyboardAiCompanionLike::getCompanionId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,4 +147,56 @@ public class KeyboardAiCompanionServiceImpl extends ServiceImpl<KeyboardAiCompan
|
|||||||
}
|
}
|
||||||
return companion.getSystemPrompt();
|
return companion.getSystemPrompt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AiCompanionVO> getLikedCompanions(Long userId) {
|
||||||
|
// 获取用户点赞过的所有AI角色ID
|
||||||
|
List<Long> likedCompanionIds = companionLikeService.getAllLikedCompanionIds(userId);
|
||||||
|
if (likedCompanionIds.isEmpty()) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询这些AI角色的详细信息(只返回已上线且可见的)
|
||||||
|
LambdaQueryWrapper<KeyboardAiCompanion> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.in(KeyboardAiCompanion::getId, likedCompanionIds)
|
||||||
|
.eq(KeyboardAiCompanion::getStatus, 1)
|
||||||
|
.eq(KeyboardAiCompanion::getVisibility, 1)
|
||||||
|
.orderByDesc(KeyboardAiCompanion::getSortOrder)
|
||||||
|
.orderByDesc(KeyboardAiCompanion::getPopularityScore);
|
||||||
|
List<KeyboardAiCompanion> companions = this.list(queryWrapper);
|
||||||
|
|
||||||
|
if (companions.isEmpty()) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取实际查询到的角色ID
|
||||||
|
List<Long> companionIds = companions.stream()
|
||||||
|
.map(KeyboardAiCompanion::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 批量统计点赞数
|
||||||
|
LambdaQueryWrapper<KeyboardAiCompanionLike> likeWrapper = new LambdaQueryWrapper<>();
|
||||||
|
likeWrapper.in(KeyboardAiCompanionLike::getCompanionId, companionIds)
|
||||||
|
.eq(KeyboardAiCompanionLike::getStatus, (short) 1);
|
||||||
|
List<KeyboardAiCompanionLike> likes = companionLikeService.list(likeWrapper);
|
||||||
|
Map<Long, Long> likeCountMap = likes.stream()
|
||||||
|
.collect(Collectors.groupingBy(KeyboardAiCompanionLike::getCompanionId, Collectors.counting()));
|
||||||
|
|
||||||
|
// 批量统计评论数
|
||||||
|
LambdaQueryWrapper<KeyboardAiCompanionComment> commentWrapper = new LambdaQueryWrapper<>();
|
||||||
|
commentWrapper.in(KeyboardAiCompanionComment::getCompanionId, companionIds)
|
||||||
|
.eq(KeyboardAiCompanionComment::getStatus, (short) 1);
|
||||||
|
List<KeyboardAiCompanionComment> comments = companionCommentService.list(commentWrapper);
|
||||||
|
Map<Long, Long> commentCountMap = comments.stream()
|
||||||
|
.collect(Collectors.groupingBy(KeyboardAiCompanionComment::getCompanionId, Collectors.counting()));
|
||||||
|
|
||||||
|
// 转换为VO并填充统计数据
|
||||||
|
return companions.stream().map(entity -> {
|
||||||
|
AiCompanionVO vo = BeanUtil.copyProperties(entity, AiCompanionVO.class);
|
||||||
|
vo.setLikeCount(likeCountMap.getOrDefault(entity.getId(), 0L).intValue());
|
||||||
|
vo.setCommentCount(commentCountMap.getOrDefault(entity.getId(), 0L).intValue());
|
||||||
|
vo.setLiked(true); // 用户已点赞
|
||||||
|
return vo;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user