feat(music): 添加音乐点赞功能及前端交互
- 后端新增点赞接口 /music/{id}/like,支持用户登录后点赞/取消点赞音乐,记录点赞数据到 user_like_music 表
- 后端修改 MusicController.getMusicById 接口,支持传入用户ID以判断当前音乐是否被该用户点赞
- 后端 MusicDTO 新增 isLiked 字段,用于前端展示点赞状态
- 数据库新增 user_like_music 表,记录用户与音乐的点赞关系,包含唯一约束防止重复点赞
- 前端 MusicDetail.vue 页面新增点赞按钮及状态展示,支持点击切换点赞状态并实时更新 UI 与点赞数
- 前端新增 toggleLikeMusic API 调用及相应交互逻辑,成功后展示操作提示信息
- 评论表 comment 新增 target_type 字段注释及状态字段注释,播放历史与各关联表新增索引优化与外键约束微调
This commit is contained in:
@@ -31,7 +31,12 @@ public class MusicController {
|
||||
*/
|
||||
@GetMapping("/{id}")
|
||||
public Result<MusicDTO> getMusicById(@PathVariable Long id) {
|
||||
MusicDTO musicDTO = musicService.getMusicById(id);
|
||||
Long userId = null;
|
||||
// 检查用户是否登录,但不强制要求登录
|
||||
if (StpUtil.isLogin()) {
|
||||
userId = StpUtil.getLoginIdAsLong();
|
||||
}
|
||||
MusicDTO musicDTO = musicService.getMusicById(id, userId);
|
||||
if (musicDTO == null) {
|
||||
// 如果音乐不存在,返回空数据而不是错误
|
||||
return Result.success(null);
|
||||
@@ -213,4 +218,20 @@ public class MusicController {
|
||||
MusicDTO musicDTO = musicService.playMusic(id);
|
||||
return Result.success(musicDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 点赞/取消点赞音乐
|
||||
*
|
||||
* @param id 音乐ID
|
||||
* @return 响应结果
|
||||
*/
|
||||
@SaCheckLogin
|
||||
@PostMapping("/{id}/like")
|
||||
public Result<Boolean> toggleLikeMusic(@PathVariable Long id) {
|
||||
// 获取当前登录用户ID
|
||||
Long userId = StpUtil.getLoginIdAsLong();
|
||||
boolean isLiked = musicService.toggleLikeMusic(id, userId);
|
||||
String message = isLiked ? "点赞成功" : "取消点赞成功";
|
||||
return Result.success(message, isLiked);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user