From 0eae203bd179a94df3b5b765654df893cc7fb1b5 Mon Sep 17 00:00:00 2001 From: ikmkj <1@qq,com> Date: Sun, 10 Aug 2025 13:27:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(music-houduan):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD=E5=B9=B6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在删除音乐、歌单和歌手时,同时删除相关的收藏、点赞和播放历史记录 - 新增按音乐ID、歌单ID和歌手ID删除收藏记录的功能 - 新增按音乐ID删除点赞记录的功能 - 新增按歌单ID删除收藏记录的功能- 优化歌单收藏和取消收藏的逻辑 - 重构部分代码以提高可维护性 --- .../repository/PlayHistoryRepository.java | 11 +++++++ .../UserCollectMusicRepository.java | 14 ++++++++ .../UserCollectPlaylistRepository.java | 33 +++++++++++++++++++ .../UserCollectSingerRepository.java | 18 ++++++++++ .../repository/UserLikeMusicRepository.java | 14 ++++++++ .../repository/UserSingerRepository.java | 11 +++++++ .../service/impl/MusicServiceImpl.java | 9 +++++ .../service/impl/PlaylistServiceImpl.java | 20 ++++++----- .../service/impl/SingerServiceImpl.java | 4 +++ 9 files changed, 126 insertions(+), 8 deletions(-) diff --git a/music-houduan/src/main/java/com/test/musichouduan/repository/PlayHistoryRepository.java b/music-houduan/src/main/java/com/test/musichouduan/repository/PlayHistoryRepository.java index 9e1ba0d..015a440 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/repository/PlayHistoryRepository.java +++ b/music-houduan/src/main/java/com/test/musichouduan/repository/PlayHistoryRepository.java @@ -8,6 +8,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @@ -76,4 +77,14 @@ public interface PlayHistoryRepository extends JpaRepository @Query(value = "INSERT INTO play_history (user_id, music_id, play_time) VALUES (?1, ?2, NOW()) " + "ON DUPLICATE KEY UPDATE play_time = NOW()", nativeQuery = true) void recordPlayHistory(Long userId, Long musicId); + + /** + * 根据音乐ID删除播放历史 + * + * @param musicId 音乐ID + */ + @Modifying + @Transactional + @Query("DELETE FROM PlayHistory ph WHERE ph.music.id = :musicId") + void deleteByMusicId(@Param("musicId") Long musicId); } diff --git a/music-houduan/src/main/java/com/test/musichouduan/repository/UserCollectMusicRepository.java b/music-houduan/src/main/java/com/test/musichouduan/repository/UserCollectMusicRepository.java index 6adf3e3..f390c49 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/repository/UserCollectMusicRepository.java +++ b/music-houduan/src/main/java/com/test/musichouduan/repository/UserCollectMusicRepository.java @@ -6,7 +6,11 @@ import com.test.musichouduan.entity.UserCollectMusic; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @@ -75,4 +79,14 @@ public interface UserCollectMusicRepository extends JpaRepository findCollectedPlaylist(Long userId, Pageable pageable); } diff --git a/music-houduan/src/main/java/com/test/musichouduan/repository/UserCollectSingerRepository.java b/music-houduan/src/main/java/com/test/musichouduan/repository/UserCollectSingerRepository.java index dd901f7..dfff97d 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/repository/UserCollectSingerRepository.java +++ b/music-houduan/src/main/java/com/test/musichouduan/repository/UserCollectSingerRepository.java @@ -8,6 +8,14 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; import java.util.Optional; /** @@ -66,4 +74,14 @@ public interface UserCollectSingerRepository extends JpaRepository { */ @Query("SELECT us.singer FROM UserSinger us WHERE us.user.id = ?1") Page findCollectedSinger(Long userId, Pageable pageable); + + /** + * 根据歌手ID删除收藏记录 + * + * @param singerId 歌手ID + */ + @Modifying + @Transactional + @Query("DELETE FROM UserSinger us WHERE us.singer.id = :singerId") + void deleteBySingerId(@Param("singerId") Long singerId); } diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java index d41a564..06a354a 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java @@ -468,6 +468,15 @@ public class MusicServiceImpl implements MusicService { fileService.deleteFile(music.getCover()); } + // 删除相关的收藏记录 + userCollectMusicRepository.deleteByMusicId(id); + + // 删除相关的点赞记录 + userLikeMusicRepository.deleteByMusicId(id); + + // 删除相关的播放历史 + playHistoryRepository.deleteByMusicId(id); + // 删除音乐 musicRepository.delete(music); diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/PlaylistServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/PlaylistServiceImpl.java index cc020e8..76fef09 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/PlaylistServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/PlaylistServiceImpl.java @@ -9,6 +9,7 @@ import com.test.musichouduan.entity.Music; import com.test.musichouduan.entity.Playlist; import com.test.musichouduan.entity.PlaylistType; import com.test.musichouduan.entity.User; +// No extra imports needed import com.test.musichouduan.exception.BusinessException; import com.test.musichouduan.repository.*; import com.fasterxml.jackson.core.type.TypeReference; @@ -70,7 +71,7 @@ public class PlaylistServiceImpl implements PlaylistService { private UserRepository userRepository; @Autowired - private UserPlaylistRepository userPlaylistRepository; + private UserCollectPlaylistRepository userCollectPlaylistRepository; @Autowired private PlayHistoryRepository playHistoryRepository; @@ -344,6 +345,9 @@ public class PlaylistServiceImpl implements PlaylistService { fileService.deleteFile(playlist.getCover()); } + // 删除相关的收藏记录 + userCollectPlaylistRepository.deleteByPlaylistId(id); + // 删除歌单 playlistRepository.delete(playlist); @@ -363,12 +367,12 @@ public class PlaylistServiceImpl implements PlaylistService { .orElseThrow(() -> new BusinessException("歌单不存在")); // 检查是否已收藏 - if (userPlaylistRepository.existsByUserAndPlaylist(user, playlist)) { + if (userCollectPlaylistRepository.existsByUserAndPlaylist(user, playlist)) { throw new BusinessException("已收藏该歌单"); } // 收藏歌单 - userPlaylistRepository.collectPlaylist(user.getId(), playlist.getId()); + userCollectPlaylistRepository.collectPlaylist(user.getId(), playlist.getId()); // 更新收藏数 playlist.setCollectCount((playlist.getCollectCount() == null ? 0 : playlist.getCollectCount()) + 1); @@ -390,12 +394,12 @@ public class PlaylistServiceImpl implements PlaylistService { .orElseThrow(() -> new BusinessException("歌单不存在")); // 检查是否已收藏 - if (!userPlaylistRepository.existsByUserAndPlaylist(user, playlist)) { + if (!userCollectPlaylistRepository.existsByUserAndPlaylist(user, playlist)) { throw new BusinessException("未收藏该歌单"); } // 取消收藏歌单 - userPlaylistRepository.uncollectPlaylist(user.getId(), playlist.getId()); + userCollectPlaylistRepository.uncollectPlaylist(user.getId(), playlist.getId()); // 更新收藏数 playlist.setCollectCount((playlist.getCollectCount() == null ? 0 : playlist.getCollectCount()) - 1); @@ -410,7 +414,7 @@ public class PlaylistServiceImpl implements PlaylistService { return false; } Long userId = StpUtil.getLoginIdAsLong(); - return userPlaylistRepository.existsByUserIdAndPlaylistId(userId, id); + return userCollectPlaylistRepository.existsByUserIdAndPlaylistId(userId, id); } @Override @@ -419,7 +423,7 @@ public class PlaylistServiceImpl implements PlaylistService { Long userId = StpUtil.getLoginIdAsLong(); // 获取用户收藏的歌单 - Page playlistPage = userPlaylistRepository.findCollectedPlaylist( + Page playlistPage = userCollectPlaylistRepository.findCollectedPlaylist( userId, PageRequest.of(page - 1, size, Sort.by(Sort.Direction.DESC, "collectTime")) ); @@ -606,7 +610,7 @@ public class PlaylistServiceImpl implements PlaylistService { // 检查当前登录用户是否已收藏该歌单 if (StpUtil.isLogin()) { Long userId = StpUtil.getLoginIdAsLong(); - boolean isCollected = userPlaylistRepository.existsByUserIdAndPlaylistId(userId, playlist.getId()); + boolean isCollected = userCollectPlaylistRepository.existsByUserIdAndPlaylistId(userId, playlist.getId()); playlistDTO.setIsCollected(isCollected); } else { playlistDTO.setIsCollected(false); diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/SingerServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/SingerServiceImpl.java index 5dcd0ff..aa3948f 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/SingerServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/SingerServiceImpl.java @@ -7,6 +7,7 @@ import com.test.musichouduan.dto.MusicDTO; import com.test.musichouduan.entity.Singer; import com.test.musichouduan.entity.SingerType; import com.test.musichouduan.entity.User; +// No extra imports needed import com.test.musichouduan.entity.Music; import com.test.musichouduan.exception.BusinessException; import com.test.musichouduan.repository.MusicRepository; @@ -293,6 +294,9 @@ public class SingerServiceImpl implements SingerService { fileService.deleteFile(singer.getAvatar()); } + // 删除相关的收藏记录 + userSingerRepository.deleteBySingerId(id); + // 删除歌手 singerRepository.delete(singer);