From b4a811ff4e40e4aa1a2947f719e94aa91709085b Mon Sep 17 00:00:00 2001 From: Tim <135014430+nagisa77@users.noreply.github.com> Date: Wed, 17 Sep 2025 12:21:17 +0800 Subject: [PATCH] Handle point history cleanup when deleting posts --- .../repository/PointHistoryRepository.java | 5 ++++- .../java/com/openisle/service/PostService.java | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/com/openisle/repository/PointHistoryRepository.java b/backend/src/main/java/com/openisle/repository/PointHistoryRepository.java index 2e3d6647e..f22af7eee 100644 --- a/backend/src/main/java/com/openisle/repository/PointHistoryRepository.java +++ b/backend/src/main/java/com/openisle/repository/PointHistoryRepository.java @@ -3,6 +3,7 @@ package com.openisle.repository; import com.openisle.model.PointHistory; import com.openisle.model.User; import com.openisle.model.Comment; +import com.openisle.model.Post; import org.springframework.data.jpa.repository.JpaRepository; import java.time.LocalDateTime; @@ -14,6 +15,8 @@ public interface PointHistoryRepository extends JpaRepository findByUserAndCreatedAtAfterOrderByCreatedAtDesc(User user, LocalDateTime createdAt); - + List findByComment(Comment comment); + + List findByPost(Post post); } diff --git a/backend/src/main/java/com/openisle/service/PostService.java b/backend/src/main/java/com/openisle/service/PostService.java index 36796e346..88c6b2b85 100644 --- a/backend/src/main/java/com/openisle/service/PostService.java +++ b/backend/src/main/java/com/openisle/service/PostService.java @@ -16,6 +16,7 @@ import com.openisle.repository.CommentRepository; import com.openisle.repository.ReactionRepository; import com.openisle.repository.PostSubscriptionRepository; import com.openisle.repository.NotificationRepository; +import com.openisle.repository.PointHistoryRepository; import com.openisle.repository.PollVoteRepository; import com.openisle.exception.RateLimitException; import lombok.extern.slf4j.Slf4j; @@ -67,6 +68,7 @@ public class PostService { private final ReactionRepository reactionRepository; private final PostSubscriptionRepository postSubscriptionRepository; private final NotificationRepository notificationRepository; + private final PointHistoryRepository pointHistoryRepository; private final PostReadService postReadService; private final ImageUploader imageUploader; private final TaskScheduler taskScheduler; @@ -95,6 +97,7 @@ public class PostService { ReactionRepository reactionRepository, PostSubscriptionRepository postSubscriptionRepository, NotificationRepository notificationRepository, + PointHistoryRepository pointHistoryRepository, PostReadService postReadService, ImageUploader imageUploader, TaskScheduler taskScheduler, @@ -118,6 +121,7 @@ public class PostService { this.reactionRepository = reactionRepository; this.postSubscriptionRepository = postSubscriptionRepository; this.notificationRepository = notificationRepository; + this.pointHistoryRepository = pointHistoryRepository; this.postReadService = postReadService; this.imageUploader = imageUploader; this.taskScheduler = taskScheduler; @@ -860,6 +864,18 @@ public class PostService { postSubscriptionRepository.findByPost(post).forEach(postSubscriptionRepository::delete); notificationRepository.deleteAll(notificationRepository.findByPost(post)); postReadService.deleteByPost(post); + List pointHistories = pointHistoryRepository.findByPost(post); + Set usersToRecalculate = pointHistories.stream() + .map(PointHistory::getUser) + .collect(Collectors.toSet()); + pointHistoryRepository.deleteAll(pointHistories); + if (!usersToRecalculate.isEmpty()) { + for (User affectedUser : usersToRecalculate) { + int newPoints = pointService.recalculateUserPoints(affectedUser); + affectedUser.setPoint(newPoints); + } + userRepository.saveAll(usersToRecalculate); + } imageUploader.removeReferences(imageUploader.extractUrls(post.getContent())); if (post instanceof LotteryPost lp) { ScheduledFuture future = scheduledFinalizations.remove(lp.getId());