fix: handle reaction notification and point deduction

This commit is contained in:
Tim
2025-08-27 20:23:28 +08:00
parent a1fa7b2d5b
commit d79dc8877d
6 changed files with 40 additions and 0 deletions

View File

@@ -114,6 +114,14 @@ public class NotificationService {
return n;
}
public void deleteReactionNotification(User fromUser, Post post, Comment comment, ReactionType reactionType) {
if (post != null) {
notificationRepository.deleteByTypeAndFromUserAndPostAndReactionType(NotificationType.REACTION, fromUser, post, reactionType);
} else if (comment != null) {
notificationRepository.deleteByTypeAndFromUserAndCommentAndReactionType(NotificationType.REACTION, fromUser, comment, reactionType);
}
}
/**
* Create notifications for all admins when a user submits a register request.
* Old register request notifications from the same applicant are removed first.

View File

@@ -150,6 +150,16 @@ public class PointService {
return addPoint(poster, 10, PointHistoryType.POST_LIKED, post, null, reactioner);
}
public int deductForReactionOfPost(String reactionerName, Long postId) {
User poster = postRepository.findById(postId).orElseThrow().getAuthor();
User reactioner = userRepository.findByUsername(reactionerName).orElseThrow();
if (poster.getId().equals(reactioner.getId())) {
return 0;
}
Post post = postRepository.findById(postId).orElseThrow();
return addPoint(poster, -10, PointHistoryType.POST_LIKE_CANCELLED, post, null, reactioner);
}
// 考虑点赞者和评论者是同一个的情况
public int awardForReactionOfComment(String reactionerName, Long commentId) {
// 根据帖子id找到评论者
@@ -169,6 +179,17 @@ public class PointService {
return addPoint(commenter, 10, PointHistoryType.COMMENT_LIKED, post, comment, reactioner);
}
public int deductForReactionOfComment(String reactionerName, Long commentId) {
User commenter = commentRepository.findById(commentId).orElseThrow().getAuthor();
User reactioner = userRepository.findByUsername(reactionerName).orElseThrow();
if (commenter.getId().equals(reactioner.getId())) {
return 0;
}
Comment comment = commentRepository.findById(commentId).orElseThrow();
Post post = comment.getPost();
return addPoint(commenter, -10, PointHistoryType.COMMENT_LIKE_CANCELLED, post, comment, reactioner);
}
public java.util.List<PointHistory> listHistory(String userName) {
User user = userRepository.findByUsername(userName).orElseThrow();
if (pointHistoryRepository.countByUser(user) == 0) {

View File

@@ -42,6 +42,7 @@ public class ReactionService {
java.util.Optional<Reaction> existing =
reactionRepository.findByUserAndPostAndType(user, post, type);
if (existing.isPresent()) {
notificationService.deleteReactionNotification(user, post, null, type);
reactionRepository.delete(existing.get());
return null;
}
@@ -65,6 +66,7 @@ public class ReactionService {
java.util.Optional<Reaction> existing =
reactionRepository.findByUserAndCommentAndType(user, comment, type);
if (existing.isPresent()) {
notificationService.deleteReactionNotification(user, null, comment, type);
reactionRepository.delete(existing.get());
return null;
}