feat(playlist): 增加歌单收藏和评论功能

- 在 CommentServiceImpl 中添加歌单评论相关逻辑
- 在 PlaylistServiceImpl 中实现歌单收藏和取消收藏功能
- 在 PlaylistDetail.vue 中显示歌单的收藏数和评论数
- 更新数据库模型,在 Singer 实体中添加收藏数和评论数字段
This commit is contained in:
ikmkj
2025-07-26 10:22:33 +08:00
parent 772c5a3e6a
commit f3a6f99992
4 changed files with 61 additions and 1 deletions

View File

@@ -48,6 +48,18 @@ public class Singer {
@JoinColumn(name = "type_id")
private SingerType type;
/**
* 收藏数
*/
@Column
private Integer collectCount;
/**
* 评论数
*/
@Column
private Integer commentCount;
/**
* 创建时间
*/

View File

@@ -10,6 +10,7 @@ import com.test.musichouduan.entity.User;
import com.test.musichouduan.exception.BusinessException;
import com.test.musichouduan.repository.CommentRepository;
import com.test.musichouduan.repository.MusicRepository;
import com.test.musichouduan.repository.PlaylistRepository;
import com.test.musichouduan.repository.UserRepository;
import com.test.musichouduan.service.CommentService;
import org.springframework.messaging.simp.SimpMessagingTemplate; // 添加导入
@@ -44,6 +45,9 @@ public class CommentServiceImpl implements CommentService {
@Autowired
private MusicRepository musicRepository;
@Autowired
private PlaylistRepository playlistRepository;
@Autowired
private SimpMessagingTemplate messagingTemplate; // 注入 SimpMessagingTemplate
@@ -121,6 +125,12 @@ public class CommentServiceImpl implements CommentService {
musicRepository.save(music);
}
});
} else if (savedComment.getTargetType() == 2) { // 2 代表歌单
playlistRepository.findById(savedComment.getTargetId()).ifPresent(playlist -> {
long commentCount = commentRepository.countByTargetIdAndTargetType(savedComment.getTargetId(), 2);
playlist.setCommentCount((int) commentCount);
playlistRepository.save(playlist);
});
}
// 将新评论转换为DTO
@@ -153,6 +163,21 @@ public class CommentServiceImpl implements CommentService {
// 删除评论
commentRepository.delete(comment);
// 更新相关实体的评论数
if (comment.getTargetType() == 1) {
musicRepository.findById(comment.getTargetId()).ifPresent(music -> {
long commentCount = commentRepository.countByTargetIdAndTargetType(comment.getTargetId(), 1);
music.setCommentCount((int) commentCount);
musicRepository.save(music);
});
} else if (comment.getTargetType() == 2) {
playlistRepository.findById(comment.getTargetId()).ifPresent(playlist -> {
long commentCount = commentRepository.countByTargetIdAndTargetType(comment.getTargetId(), 2);
playlist.setCommentCount((int) commentCount);
playlistRepository.save(playlist);
});
}
// 如果是父评论,同时删除子评论
if (comment.getParentId() == null) {
List<Comment> children = commentRepository.findByParentIdOrderByCreateTimeAsc(id);

View File

@@ -275,6 +275,10 @@ public class PlaylistServiceImpl implements PlaylistService {
// 收藏歌单
userPlaylistRepository.collectPlaylist(user.getId(), playlist.getId());
// 更新收藏数
playlist.setCollectCount(playlist.getCollectCount() + 1);
playlistRepository.save(playlist);
return true;
}
@@ -298,6 +302,10 @@ public class PlaylistServiceImpl implements PlaylistService {
// 取消收藏歌单
userPlaylistRepository.uncollectPlaylist(user.getId(), playlist.getId());
// 更新收藏数
playlist.setCollectCount(playlist.getCollectCount() - 1);
playlistRepository.save(playlist);
return true;
}