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:
ikmkj
2025-07-25 23:25:45 +08:00
parent 59b6b251db
commit 4435315acf
11 changed files with 431 additions and 248 deletions

View File

@@ -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);
}
}