refactor(music-houduan): 优化音乐评论数量统计逻辑

- 引入 Optional 类以提高代码的可读性和健壮性
- 使用 countByTargetIdAndTargetType 方法直接统计评论数量,避免不必要的更新操作
- 添加类型判断,确保只处理音乐类型的评论
This commit is contained in:
ikmkj
2025-07-25 21:59:50 +08:00
parent e4b828ead9
commit 59b6b251db

View File

@@ -5,6 +5,7 @@ import com.test.musichouduan.dto.CommentDTO;
import com.test.musichouduan.dto.PageResult; import com.test.musichouduan.dto.PageResult;
import com.test.musichouduan.dto.UserDTO; import com.test.musichouduan.dto.UserDTO;
import com.test.musichouduan.entity.Comment; import com.test.musichouduan.entity.Comment;
import com.test.musichouduan.entity.Music;
import com.test.musichouduan.entity.User; import com.test.musichouduan.entity.User;
import com.test.musichouduan.exception.BusinessException; import com.test.musichouduan.exception.BusinessException;
import com.test.musichouduan.repository.CommentRepository; import com.test.musichouduan.repository.CommentRepository;
@@ -25,6 +26,7 @@ import jakarta.persistence.criteria.Predicate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -104,13 +106,20 @@ public class CommentServiceImpl implements CommentService {
// 保存评论 // 保存评论
Comment savedComment = commentRepository.save(comment); Comment savedComment = commentRepository.save(comment);
// 如果评论的是音乐 (targetType=1, 这个值需要与前端约定好) // 如果评论的是音乐 (targetType=1, 这个值需要与前端约定好)
// 通常可以定义一个枚举或常量类来管理这些类型值 // 通常可以定义一个枚举或常量类来管理这些类型值
if (savedComment.getTargetType() == 1) { if (savedComment.getTargetType() == 1) {
musicRepository.findById(savedComment.getTargetId()).ifPresent(music -> { musicRepository.findById(savedComment.getTargetId()).ifPresent(music -> {
int currentCommentCount = music.getCommentCount() != null ? music.getCommentCount() : 0; // 首先判断类型是否等于1
music.setCommentCount(currentCommentCount + 1); if (savedComment.getTargetType() == 1) {
musicRepository.save(music); // 查询评论表使用COUNT(id)统计该音乐的评论数量
long commentCount = commentRepository.countByTargetIdAndTargetType(savedComment.getTargetId(), 1);
// 设置到音乐中
music.setCommentCount((int) commentCount);
// 保存音乐实体
musicRepository.save(music);
}
}); });
} }