diff --git a/backend/src/main/java/com/openisle/repository/LotteryPostRepository.java b/backend/src/main/java/com/openisle/repository/LotteryPostRepository.java index f06350329..cff12b18f 100644 --- a/backend/src/main/java/com/openisle/repository/LotteryPostRepository.java +++ b/backend/src/main/java/com/openisle/repository/LotteryPostRepository.java @@ -3,5 +3,11 @@ package com.openisle.repository; import com.openisle.model.LotteryPost; import org.springframework.data.jpa.repository.JpaRepository; +import java.time.LocalDateTime; +import java.util.List; + public interface LotteryPostRepository extends JpaRepository { + List findByEndTimeAfterAndWinnersIsEmpty(LocalDateTime now); + + List findByEndTimeBeforeAndWinnersIsEmpty(LocalDateTime now); } diff --git a/backend/src/main/java/com/openisle/service/PostService.java b/backend/src/main/java/com/openisle/service/PostService.java index b5aa65a80..69d5daf41 100644 --- a/backend/src/main/java/com/openisle/service/PostService.java +++ b/backend/src/main/java/com/openisle/service/PostService.java @@ -42,6 +42,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ScheduledFuture; +import jakarta.annotation.PostConstruct; + @Service public class PostService { private final PostRepository postRepository; @@ -100,6 +102,20 @@ public class PostService { this.publishMode = publishMode; } + @PostConstruct + private void rescheduleLotteries() { + LocalDateTime now = LocalDateTime.now(); + for (LotteryPost lp : lotteryPostRepository.findByEndTimeAfterAndWinnersIsEmpty(now)) { + ScheduledFuture future = taskScheduler.schedule( + () -> finalizeLottery(lp.getId()), + java.util.Date.from(lp.getEndTime().atZone(ZoneId.systemDefault()).toInstant())); + scheduledFinalizations.put(lp.getId(), future); + } + for (LotteryPost lp : lotteryPostRepository.findByEndTimeBeforeAndWinnersIsEmpty(now)) { + finalizeLottery(lp.getId()); + } + } + public PublishMode getPublishMode() { return publishMode; }