feat(music): 添加音乐状态获取功能并优化音乐列表展示

- 新增 getMusicStatus API 接口,用于获取音乐的收藏和点赞状态
- 在音乐列表、歌单详情、搜索结果等页面中集成音乐状态获取功能
- 优化音乐播放器,主动获取并更新音乐状态
- 为每首歌曲添加收藏和点赞状态字段
This commit is contained in:
ikmkj
2025-07-26 00:02:03 +08:00
parent 4435315acf
commit 439d4b7588
11 changed files with 205 additions and 27 deletions

View File

@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.stp.StpUtil;
import com.test.musichouduan.dto.MusicDTO;
import com.test.musichouduan.dto.MusicStatusDTO;
import com.test.musichouduan.dto.PageResult;
import com.test.musichouduan.dto.Result;
import com.test.musichouduan.service.MusicService;
@@ -234,4 +235,17 @@ public class MusicController {
String message = isLiked ? "点赞成功" : "取消点赞成功";
return Result.success(message, isLiked);
}
/**
* 获取音乐的收藏和点赞状态
*
* @param id 音乐ID
* @return 响应结果
*/
@GetMapping("/{id}/status")
public Result<MusicStatusDTO> getMusicStatus(@PathVariable Long id) {
Long userId = StpUtil.getLoginIdDefaultNull() != null ? StpUtil.getLoginIdAsLong() : null;
MusicStatusDTO status = musicService.getMusicStatus(id, userId);
return Result.success(status);
}
}

View File

@@ -5,7 +5,9 @@ import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import java.time.LocalDateTime;
/**
* 用户点赞音乐实体类
*/
@Data
@Entity
@Table(name = "user_like_music", uniqueConstraints = {

View File

@@ -1,6 +1,7 @@
package com.test.musichouduan.service;
import com.test.musichouduan.dto.MusicDTO;
import com.test.musichouduan.dto.MusicStatusDTO;
import com.test.musichouduan.dto.PageResult;
import com.test.musichouduan.entity.Music;
import org.springframework.web.multipart.MultipartFile;
@@ -151,4 +152,13 @@ public interface MusicService {
* @return 是否点赞成功 (true: 点赞, false: 取消点赞)
*/
boolean toggleLikeMusic(Long musicId, Long userId);
/**
* 获取音乐的收藏和点赞状态
*
* @param musicId 音乐ID
* @param userId 用户ID
* @return 音乐状态DTO
*/
MusicStatusDTO getMusicStatus(Long musicId, Long userId);
}

View File

@@ -2,6 +2,7 @@ package com.test.musichouduan.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.test.musichouduan.dto.MusicDTO;
import com.test.musichouduan.dto.MusicStatusDTO;
import com.test.musichouduan.dto.PageResult;
import com.test.musichouduan.entity.Music;
import com.test.musichouduan.entity.MusicType;
@@ -599,6 +600,17 @@ public class MusicServiceImpl implements MusicService {
}
}
@Override
public MusicStatusDTO getMusicStatus(Long musicId, Long userId) {
if (userId == null) {
// 用户未登录,返回默认状态
return new MusicStatusDTO(false, false);
}
boolean isCollected = userCollectMusicRepository.existsByUserIdAndMusicId(userId, musicId);
boolean isLiked = userLikeMusicRepository.existsByUserIdAndMusicId(userId, musicId);
return new MusicStatusDTO(isCollected, isLiked);
}
/**
* 将实体转换为DTO
*