From e6fc643b612d39d74399b159e8d21479d7b00c37 Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 24 Apr 2024 23:52:58 +0900 Subject: [PATCH 1/5] feat: add query --- src/main/java/zero/eight/donut/repository/GiftRepository.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/zero/eight/donut/repository/GiftRepository.java b/src/main/java/zero/eight/donut/repository/GiftRepository.java index 3b8a4ad..10fe6a9 100644 --- a/src/main/java/zero/eight/donut/repository/GiftRepository.java +++ b/src/main/java/zero/eight/donut/repository/GiftRepository.java @@ -19,4 +19,8 @@ public interface GiftRepository extends JpaRepository { int sumByNotAssigned(); @Query(value = "SELECT SUM(g.price) FROM gift g WHERE g.store = :storeName", nativeQuery = true) int sumByStoreName(String storeName); + + @Query(value = "SELECT * FROM gift g WHERE g.status = :status AND g.is_assigned = false" + + "AND g.due_date BETWEEN :startDate AND :endDate", nativeQuery = true) + List findAllByImminentAndNotAssignedAndStatus(LocalDateTime startDate, LocalDateTime endDate, String status); } From af000c9e41758ad3783e0677475f4015c8a4c421 Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 24 Apr 2024 23:53:23 +0900 Subject: [PATCH 2/5] feat: set scheduled service --- .../java/zero/eight/donut/DonutApplication.java | 2 ++ .../zero/eight/donut/service/DonationService.java | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/main/java/zero/eight/donut/DonutApplication.java b/src/main/java/zero/eight/donut/DonutApplication.java index 2fad6dc..c094421 100644 --- a/src/main/java/zero/eight/donut/DonutApplication.java +++ b/src/main/java/zero/eight/donut/DonutApplication.java @@ -3,7 +3,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.scheduling.annotation.EnableScheduling; +@EnableScheduling @EnableJpaAuditing @SpringBootApplication public class DonutApplication { diff --git a/src/main/java/zero/eight/donut/service/DonationService.java b/src/main/java/zero/eight/donut/service/DonationService.java index 8b7f42b..c1fd08b 100644 --- a/src/main/java/zero/eight/donut/service/DonationService.java +++ b/src/main/java/zero/eight/donut/service/DonationService.java @@ -2,12 +2,17 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import zero.eight.donut.common.response.ApiResponse; +import zero.eight.donut.domain.Gift; import zero.eight.donut.dto.donation.DonateGiftRequestDto; import zero.eight.donut.dto.donation.GiftboxRequestDto; +import zero.eight.donut.repository.GiftRepository; import java.io.IOException; +import java.time.LocalDateTime; +import java.util.List; @Slf4j @RequiredArgsConstructor @@ -15,6 +20,14 @@ public class DonationService { private final SerialDonationService donationService; + private final GiftRepository giftRepository; + + @Scheduled(cron = "0 0 0 * * *") + public void autoDonate(){ + LocalDateTime endDate = LocalDateTime.now(); + LocalDateTime startDate = endDate; + List giftList = giftRepository.findAllByImminentAndNotAssignedAndStatus(startDate, endDate, "UNUSED"); + } public synchronized ApiResponse assignGiftbox(GiftboxRequestDto giftboxRequestDto) { return donationService.assignGiftbox(giftboxRequestDto); From e75184b010d0b4eb72f6fbd20334b116eeb625dd Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 25 Apr 2024 00:03:39 +0900 Subject: [PATCH 3/5] chore: rename query --- src/main/java/zero/eight/donut/repository/GiftRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/zero/eight/donut/repository/GiftRepository.java b/src/main/java/zero/eight/donut/repository/GiftRepository.java index 10fe6a9..a2677d4 100644 --- a/src/main/java/zero/eight/donut/repository/GiftRepository.java +++ b/src/main/java/zero/eight/donut/repository/GiftRepository.java @@ -22,5 +22,5 @@ public interface GiftRepository extends JpaRepository { @Query(value = "SELECT * FROM gift g WHERE g.status = :status AND g.is_assigned = false" + "AND g.due_date BETWEEN :startDate AND :endDate", nativeQuery = true) - List findAllByImminentAndNotAssignedAndStatus(LocalDateTime startDate, LocalDateTime endDate, String status); + List findAllByNotAssignedAndStatusAndDueDateBetween(String status,LocalDateTime startDate, LocalDateTime endDate); } From 030994aa724f23cc32ea6490fc0488a153b1fce7 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 25 Apr 2024 00:03:53 +0900 Subject: [PATCH 4/5] chore: rename status --- src/main/java/zero/eight/donut/domain/enums/Status.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/zero/eight/donut/domain/enums/Status.java b/src/main/java/zero/eight/donut/domain/enums/Status.java index 492e4f8..6399a05 100644 --- a/src/main/java/zero/eight/donut/domain/enums/Status.java +++ b/src/main/java/zero/eight/donut/domain/enums/Status.java @@ -4,7 +4,7 @@ @Getter public enum Status { - SELFUSED("SELFUSED"), + SELF_USED("SELF_USED"), STORED("STORED"), REPORTED("REPORTED"), UNUSED("UNUSED"), From 6651a1ddb531aa48854a5454c7ae925e4b9407e3 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 25 Apr 2024 00:04:41 +0900 Subject: [PATCH 5/5] feat: donate imminent gift --- .../zero/eight/donut/service/DonationService.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/zero/eight/donut/service/DonationService.java b/src/main/java/zero/eight/donut/service/DonationService.java index c1fd08b..b045ead 100644 --- a/src/main/java/zero/eight/donut/service/DonationService.java +++ b/src/main/java/zero/eight/donut/service/DonationService.java @@ -2,10 +2,13 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import zero.eight.donut.common.response.ApiResponse; import zero.eight.donut.domain.Gift; +import zero.eight.donut.domain.enums.Status; import zero.eight.donut.dto.donation.DonateGiftRequestDto; import zero.eight.donut.dto.donation.GiftboxRequestDto; import zero.eight.donut.repository.GiftRepository; @@ -22,11 +25,15 @@ public class DonationService { private final SerialDonationService donationService; private final GiftRepository giftRepository; + @Async + @Transactional @Scheduled(cron = "0 0 0 * * *") public void autoDonate(){ - LocalDateTime endDate = LocalDateTime.now(); - LocalDateTime startDate = endDate; - List giftList = giftRepository.findAllByImminentAndNotAssignedAndStatus(startDate, endDate, "UNUSED"); + List giftList = giftRepository.findAllByNotAssignedAndStatusAndDueDateBetween( "STORED", LocalDateTime.now(), LocalDateTime.now().minusDays(30)); + for (Gift gift : giftList) { + gift.updateStatus("UNUSED"); + giftRepository.save(gift); + } } public synchronized ApiResponse assignGiftbox(GiftboxRequestDto giftboxRequestDto) {