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