blob: 530b164139e9b8aecaf670fa1198200b67d710a7 [file] [log] [blame]
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");
}
}
}
}