| package com.example.myproject.service; |
| |
| import com.example.myproject.entity.SeedComment; |
| import com.example.myproject.entity.SeedCommentLikes; |
| import com.example.myproject.repository.SeedCommentLikesRepository; |
| import com.example.myproject.repository.SeedCommentRepository; |
| import org.springframework.beans.factory.annotation.Autowired; |
| import org.springframework.stereotype.Service; |
| |
| import java.util.*; |
| |
| @Service |
| public class SeedCommentService { |
| |
| @Autowired |
| private SeedCommentRepository seedCommentRepository; |
| |
| @Autowired |
| private SeedCommentLikesRepository seedCommentLikesRepository; |
| |
| public String publishComment(int seedId, SeedComment seedComment) { |
| try { |
| // 如果是回复评论,检查父评论是否存在 |
| if (seedComment.getComCommentId() != 0) { |
| // 查找父评论是否存在 |
| boolean parentExists = seedCommentRepository.existsById(seedComment.getComCommentId()); |
| if (!parentExists) { |
| return "{ \"status\": \"error\", \"message\": \"父评论不存在\" }"; |
| } |
| } |
| |
| // 设置评论的种子ID |
| seedComment.setSeedId(seedId); |
| seedComment.setCommentTime(new Date()); |
| seedComment.setLikesCount(0); // 默认点赞数为0 |
| seedComment.setReplyCount(0); // 默认回复数为0 |
| |
| // 如果没有父评论,com_comment_id 默认为0 |
| if (seedComment.getComCommentId() == 0) { |
| seedComment.setComCommentId(0); |
| } |
| |
| // 保存评论到数据库 |
| seedCommentRepository.save(seedComment); |
| |
| // 返回成功信息 |
| return "{ \"status\": \"success\", \"message\": \"评论发布成功\" }"; |
| } catch (Exception e) { |
| // 处理异常,返回失败信息 |
| return "{ \"status\": \"error\", \"message\": \"评论发布失败\" }"; |
| } |
| } |
| |
| public Map<String, Object> getAllCommentsForSeed(int seedId) { |
| // 获取该种子的所有评论(顶级评论) |
| List<SeedComment> allComments = seedCommentRepository.findBySeedId(seedId); |
| List<Map<String, Object>> responseComments = new ArrayList<>(); |
| |
| for (SeedComment comment : allComments) { |
| Map<String, Object> commentData = new HashMap<>(); |
| commentData.put("comment_id", comment.getCommentId()); |
| commentData.put("user_id", comment.getUserId()); |
| commentData.put("username", "User" + comment.getUserId()); // 通过用户ID查询用户名 |
| commentData.put("content", comment.getContent()); |
| commentData.put("parent_comment_id", comment.getComCommentId()); |
| |
| // 获取该评论的所有回复 |
| List<Map<String, Object>> replies = getRepliesForComment(comment.getCommentId()); |
| commentData.put("replies", replies); |
| |
| responseComments.add(commentData); |
| } |
| |
| // 返回最终结果 |
| Map<String, Object> result = new LinkedHashMap<>(); |
| result.put("status", "success"); |
| result.put("comments", responseComments); |
| |
| return result; |
| } |
| |
| // 获取特定评论的所有回复 |
| private List<Map<String, Object>> getRepliesForComment(long parentCommentId) { |
| List<SeedComment> replies = seedCommentRepository.findByComCommentId(parentCommentId); |
| List<Map<String, Object>> replyResponses = new ArrayList<>(); |
| |
| for (SeedComment reply : replies) { |
| Map<String, Object> replyData = new LinkedHashMap<>(); |
| replyData.put("comment_id", reply.getCommentId()); |
| replyData.put("user_id", reply.getUserId()); |
| replyData.put("username", "User" + reply.getUserId()); // 通过用户ID查询用户名 |
| replyData.put("content", reply.getContent()); |
| replyData.put("parent_comment_id", reply.getComCommentId()); |
| replyResponses.add(replyData); |
| } |
| |
| return replyResponses; |
| } |
| |
| // 点赞切换逻辑 |
| public Map<String, Object> toggleLike(Long commentId, Long userId) { |
| // 查找是否有该评论 |
| Optional<SeedComment> seedCommentOptional = seedCommentRepository.findById(commentId); |
| if (!seedCommentOptional.isPresent()) { |
| return Map.of("status", "error", "message", "评论不存在"); |
| } |
| |
| SeedComment seedComment = seedCommentOptional.get(); |
| |
| // 查找该用户是否已点赞 |
| Optional<SeedCommentLikes> commentLikeOptional = seedCommentLikesRepository.findByCommentIdAndUserId(commentId, userId); |
| |
| // 如果用户未点赞,添加新的点赞记录 |
| if (commentLikeOptional.isEmpty()) { |
| SeedCommentLikes newLike = new SeedCommentLikes(); |
| newLike.setCommentId(commentId); |
| newLike.setUserId(userId); |
| newLike.setIsLiked(true); |
| |
| // 更新 SeedComment 表中的点赞数 |
| seedComment.setLikesCount(seedComment.getLikesCount() + 1); |
| seedCommentRepository.save(seedComment); |
| |
| // 保存点赞记录 |
| seedCommentLikesRepository.save(newLike); |
| |
| return Map.of("status", "success", "message", "操作成功", "liked", "true"); |
| } else { |
| SeedCommentLikes commentLike = commentLikeOptional.get(); |
| |
| // 如果已经点赞,取消点赞 |
| if (commentLike.getIsLiked()) { |
| commentLike.setIsLiked(false); |
| |
| // 更新 SeedComment 表中的点赞数 |
| seedComment.setLikesCount(seedComment.getLikesCount() - 1); |
| seedCommentRepository.save(seedComment); |
| |
| // 更新点赞记录 |
| seedCommentLikesRepository.save(commentLike); |
| |
| return Map.of("status", "success", "message", "操作成功", "liked", "false"); |
| } else { |
| // 如果未点赞,进行点赞 |
| commentLike.setIsLiked(true); |
| |
| // 更新 SeedComment 表中的点赞数 |
| seedComment.setLikesCount(seedComment.getLikesCount() + 1); |
| seedCommentRepository.save(seedComment); |
| |
| // 更新点赞记录 |
| seedCommentLikesRepository.save(commentLike); |
| |
| return Map.of("status", "success", "message", "操作成功", "liked", "true"); |
| } |
| } |
| } |
| } |