Skip to content

Commit f9f1f79

Browse files
Merge pull request #58 from Donut-DONationUTile/feature/donation/giver
feat: 자동 기부 실행
2 parents 5bd34fb + 6651a1d commit f9f1f79

File tree

4 files changed

+27
-1
lines changed

4 files changed

+27
-1
lines changed

src/main/java/zero/eight/donut/DonutApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
55
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
6+
import org.springframework.scheduling.annotation.EnableScheduling;
67

8+
@EnableScheduling
79
@EnableJpaAuditing
810
@SpringBootApplication
911
public class DonutApplication {

src/main/java/zero/eight/donut/domain/enums/Status.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
@Getter
66
public enum Status {
7-
SELFUSED("SELFUSED"),
7+
SELF_USED("SELF_USED"),
88
STORED("STORED"),
99
REPORTED("REPORTED"),
1010
UNUSED("UNUSED"),

src/main/java/zero/eight/donut/repository/GiftRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@ public interface GiftRepository extends JpaRepository<Gift, Long> {
1919
int sumByNotAssigned();
2020
@Query(value = "SELECT SUM(g.price) FROM gift g WHERE g.store = :storeName", nativeQuery = true)
2121
int sumByStoreName(String storeName);
22+
23+
@Query(value = "SELECT * FROM gift g WHERE g.status = :status AND g.is_assigned = false" +
24+
"AND g.due_date BETWEEN :startDate AND :endDate", nativeQuery = true)
25+
List<Gift> findAllByNotAssignedAndStatusAndDueDateBetween(String status,LocalDateTime startDate, LocalDateTime endDate);
2226
}

src/main/java/zero/eight/donut/service/DonationService.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,39 @@
22

33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.springframework.scheduling.annotation.Async;
6+
import org.springframework.scheduling.annotation.Scheduled;
57
import org.springframework.stereotype.Service;
8+
import org.springframework.transaction.annotation.Transactional;
69
import zero.eight.donut.common.response.ApiResponse;
10+
import zero.eight.donut.domain.Gift;
11+
import zero.eight.donut.domain.enums.Status;
712
import zero.eight.donut.dto.donation.DonateGiftRequestDto;
813
import zero.eight.donut.dto.donation.GiftboxRequestDto;
14+
import zero.eight.donut.repository.GiftRepository;
915

1016
import java.io.IOException;
17+
import java.time.LocalDateTime;
18+
import java.util.List;
1119

1220
@Slf4j
1321
@RequiredArgsConstructor
1422
@Service
1523
public class DonationService {
1624

1725
private final SerialDonationService donationService;
26+
private final GiftRepository giftRepository;
27+
28+
@Async
29+
@Transactional
30+
@Scheduled(cron = "0 0 0 * * *")
31+
public void autoDonate(){
32+
List<Gift> giftList = giftRepository.findAllByNotAssignedAndStatusAndDueDateBetween( "STORED", LocalDateTime.now(), LocalDateTime.now().minusDays(30));
33+
for (Gift gift : giftList) {
34+
gift.updateStatus("UNUSED");
35+
giftRepository.save(gift);
36+
}
37+
}
1838

1939
public synchronized ApiResponse<?> assignGiftbox(GiftboxRequestDto giftboxRequestDto) {
2040
return donationService.assignGiftbox(giftboxRequestDto);

0 commit comments

Comments
 (0)