From 339733aac6b9e44f5648fd2d3e3c85546c52a48b Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 1 May 2024 02:15:02 +0900 Subject: [PATCH 1/2] chore: merge --- Donut-Server-yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Donut-Server-yml b/Donut-Server-yml index 909d65d..553a629 160000 --- a/Donut-Server-yml +++ b/Donut-Server-yml @@ -1 +1 @@ -Subproject commit 909d65d0c406974483945ed43c3cd7a86e27dae2 +Subproject commit 553a629a17ca69bcf037c0a6a6780440347c75a4 From d39fe29c85f305273f87142526c6d9bf996f8637 Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 1 May 2024 19:22:48 +0900 Subject: [PATCH 2/2] feat: create benefit if null --- .../donut/service/SerialDonationService.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/zero/eight/donut/service/SerialDonationService.java b/src/main/java/zero/eight/donut/service/SerialDonationService.java index fed8d8c..9c4ca2c 100644 --- a/src/main/java/zero/eight/donut/service/SerialDonationService.java +++ b/src/main/java/zero/eight/donut/service/SerialDonationService.java @@ -67,13 +67,9 @@ public ApiResponse assignGiftbox(GiftboxRequestDto giftboxRequestDto) { // 할당 가능 금액 여부 검증 Receiver receiver = authUtils.getReceiver(); - Optional benefitOptional = benefitRepository.findByReceiver(receiver); - if (benefitOptional.isEmpty()) { - // 수혜 내역 부재 시(서버 오류) - log.info("수혜 내역 부재(INTERNAL_SERVER_ERROR)"); - throw new InternalServerErrorException(Error.INTERNAL_SERVER_ERROR); - } - else if(!benefitOptional.get().getAvailability()) { + Benefit benefit = benefitRepository.findByReceiverIdAndThisMonth(receiver.getId(), LocalDateTime.now().getYear(), LocalDateTime.now().getMonthValue()) + .orElseGet(() -> createNewBenefit(receiver)); + if(benefit.getAvailability()) { // 가용 잔액 부족 시(잔액 부족 오류) log.info("가용 잔액 부족(INSUFFICIENT_BALANCE_EXCEPTION)"); return ApiResponse.failure(Error.INSUFFICIENT_BALANCE_EXCEPTION); @@ -115,7 +111,7 @@ else if (giftRepository.sumAvailableGiftsByStoreName(giftboxRequestDto.getStore( // 구성된 꾸러미가 할당 가능한 금액인지 검증 // 이번 달의 남은 수혜 가능 금액 계산 - Integer possibleAmount = montlyLimit - benefitOptional.get().getSum(); + Integer possibleAmount = montlyLimit - benefit.getSum(); // 구성된 꾸러미를 포함한 총 수혜 금액이 이달의 수혜 가능 금액을 조금이라도 초과하면 할당 불가 if (assignDto.getAssignedValue() > possibleAmount) { @@ -137,7 +133,7 @@ else if (giftRepository.sumAvailableGiftsByStoreName(giftboxRequestDto.getStore( log.info("꾸러미에 기프티콘 할당 완료"); // 수혜 내역 업데이트 - benefitOptional.get().updateSum(assignDto.getAssignedValue()); + benefit.updateSum(assignDto.getAssignedValue()); return ApiResponse.success(Success.ASSIGN_BENEFIT_SUCCESS, Map.of("giftboxId", giftbox.getId())); } @@ -291,7 +287,17 @@ private void sendImageToAI(Long giftId, MultipartFile giftImage){ }) .subscribe(); } - + private Benefit createNewBenefit(Receiver receiver){ + Benefit newBenefit = Benefit.builder() + .receiver(receiver) + .sum(0) + .month(LocalDateTime.now().getMonthValue()) + .year(LocalDateTime.now().getMonthValue()) + .availability(true) + .build(); + benefitRepository.save(newBenefit); + return newBenefit; + } @Transactional public ApiResponse donateWalletGift(Long giftId) { // 기프티콘 찾기