feat(music): 添加音乐状态获取功能并优化音乐列表展示
- 新增 getMusicStatus API 接口,用于获取音乐的收藏和点赞状态 - 在音乐列表、歌单详情、搜索结果等页面中集成音乐状态获取功能 - 优化音乐播放器,主动获取并更新音乐状态 - 为每首歌曲添加收藏和点赞状态字段
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,9 @@ import lombok.Data;
|
||||
import org.hibernate.annotations.CreationTimestamp;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 用户点赞音乐实体类
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name = "user_like_music", uniqueConstraints = {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user