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/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"), diff --git a/src/main/java/zero/eight/donut/repository/GiftRepository.java b/src/main/java/zero/eight/donut/repository/GiftRepository.java index 3b8a4ad..a2677d4 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 findAllByNotAssignedAndStatusAndDueDateBetween(String status,LocalDateTime startDate, LocalDateTime endDate); } diff --git a/src/main/java/zero/eight/donut/service/DonationService.java b/src/main/java/zero/eight/donut/service/DonationService.java index 8b7f42b..b045ead 100644 --- a/src/main/java/zero/eight/donut/service/DonationService.java +++ b/src/main/java/zero/eight/donut/service/DonationService.java @@ -2,12 +2,20 @@ 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; import java.io.IOException; +import java.time.LocalDateTime; +import java.util.List; @Slf4j @RequiredArgsConstructor @@ -15,6 +23,18 @@ public class DonationService { private final SerialDonationService donationService; + private final GiftRepository giftRepository; + + @Async + @Transactional + @Scheduled(cron = "0 0 0 * * *") + public void autoDonate(){ + 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) { return donationService.assignGiftbox(giftboxRequestDto);