Skip to content

Commit

Permalink
Merge pull request #88 from Donut-DONationUTile/feature/home/receiver
Browse files Browse the repository at this point in the history
feat: create benefit if null
  • Loading branch information
Kang1221 authored May 1, 2024
2 parents a565b0a + 731dc47 commit 6ff743c
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public interface BenefitRepository extends JpaRepository<Benefit, Long> {
Optional<Benefit> findByReceiver(Receiver receiver);

@Query("SELECT b FROM Benefit b WHERE b.receiver.id =?1 AND b.year = ?2 AND b.month= ?3")
Benefit findByReceiverIdAndThisMonth(Long receiverId, Integer year, Integer month);
Optional<Benefit> findByReceiverIdAndThisMonth(Long receiverId, Integer year, Integer month);

@Query(value = "SELECT SUM(b.sum) FROM benefit b WHERE b.receiver_id = :receiverId", nativeQuery = true)
Integer sumBenefitByReceiverId(@Param("receiverId") Long receiverId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Service
@RequiredArgsConstructor
Expand All @@ -44,7 +45,9 @@ public ApiResponse<?> receivedDonation(){
Integer thisYear = LocalDateTime.now().getYear();
Integer thisMonth = LocalDateTime.now().getMonthValue();

Benefit benefit = benefitRepository.findByReceiverIdAndThisMonth(receiver.getId(), thisYear, thisMonth);
Benefit benefit = benefitRepository.findByReceiverIdAndThisMonth(receiver.getId(), thisYear, thisMonth)
.orElseGet(() -> createNewBenefit(receiver));

//수혜 기프티콘 목록
List<Giftbox> giftboxList = giftboxRepository.findAllByReceiverId(receiver.getId());
List<ReceivedGift> giftList = new ArrayList<>();
Expand All @@ -69,4 +72,15 @@ public ApiResponse<?> receivedDonation(){

return ApiResponse.success(Success.GET_HISTORY_RECEIVER_BENEFIT_SUCCESS, responseDto);
}
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;
}
}
45 changes: 29 additions & 16 deletions src/main/java/zero/eight/donut/service/HomeReceiverService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.springframework.transaction.annotation.Transactional;
import zero.eight.donut.common.response.ApiResponse;
import zero.eight.donut.config.jwt.AuthUtils;
import zero.eight.donut.domain.Benefit;
import zero.eight.donut.domain.Gift;
import zero.eight.donut.domain.Giftbox;
import zero.eight.donut.domain.Receiver;
Expand All @@ -19,6 +20,7 @@
import zero.eight.donut.repository.GiftboxRepository;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

Expand All @@ -40,19 +42,12 @@ public ApiResponse receiverHome(){
Long receiver_id = receiver.getId();

//사용 가능한 꾸러미만 조회
List<Giftbox> giftboxList = Optional.ofNullable(giftboxRepository.findAllByReceiverIdAndIsAvailable(receiver.getId()))
List<Giftbox> giftboxList = Optional.ofNullable(giftboxRepository.findAllByReceiverIdAndIsAvailable(receiver_id))
.orElse(Collections.emptyList());

//사용처별 꾸러미 잔액
// Optional<Integer> cuGiftBox = Optional.ofNullable(giftboxRepository.getSumByStore(Store.CU));
// Optional<Integer> gs25GiftBox = Optional.ofNullable(giftboxRepository.getSumByStore(Store.GS25));
// Optional<Integer> sevenelevenGiftBox = Optional.ofNullable(giftboxRepository.getSumByStore(Store.SEVENELEVEN));
// Integer cu = cuGiftBox.orElse(0);
// Integer gs25 = gs25GiftBox.orElse(0);
// Integer seveneleven = sevenelevenGiftBox.orElse(0);

//사용처별 꾸러미 잔액 -> 쿼리 한번만 호출하도록 변경
Map<Store, Integer> storeGiftBoxMap = giftboxRepository.getGiftboxSumsByStore(receiver.getId());
Map<Store, Integer> storeGiftBoxMap = giftboxRepository.getGiftboxSumsByStore(receiver_id);
Integer cu = storeGiftBoxMap.getOrDefault(Store.CU, 0);
Integer gs25 = storeGiftBoxMap.getOrDefault(Store.GS25, 0);
Integer seveneleven = storeGiftBoxMap.getOrDefault(Store.SEVENELEVEN, 0);
Expand All @@ -72,16 +67,24 @@ public ApiResponse receiverHome(){
}

/***
* 꾸러미 신청 가능 여부
* 1. 현재 갖고 있는 꾸러미들의 총합이 1000원 이하일 것
* 2. 이번 달 수혜 금액을 넘지 않을 것
* 3. 기부됐지만 할당되지 않은 기프티콘들의 합이 1000원 이상일 것
* Get Giftbox Eligibility
* 1. The total of the current packages held must be under 1000 KRW.
* 2. It will not exceed this month's benefit amount.
* 3. The sum of donated but unassigned Gifticons must be over 1000 KRW.
*/
Boolean availability = true;
LocalDate now = LocalDate.now();
if(amount > 1000
|| !benefitRepository.findByReceiverIdAndThisMonth(receiver.getId(), now.getYear(), now.getMonthValue()).getAvailability()
|| giftRepository.sumByNotAssigned() <1001)
//2. check this month benefit amount
Optional<Benefit> optionalBenefit = benefitRepository.findByReceiverIdAndThisMonth(receiver_id, now.getYear(), now.getMonthValue());
Boolean checkbenefit = optionalBenefit.map(Benefit::getAvailability)
.orElseGet(() -> {
createNewBenefit(receiver);
return Boolean.TRUE;
});

if(amount > 1000 //1.
|| !checkbenefit //2.
|| giftRepository.sumByNotAssigned() <1001) //3.
availability = false;


Expand Down Expand Up @@ -160,6 +163,16 @@ public ApiResponse receiverGetOneGift(Long giftId){
return ApiResponse.success(Success.HOME_RECEIVER_GIFT_SUCCESS, getGiftInfo(giftId, gift));
}

public void 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);
}
public GetGiftResponseDto getGiftInfo(Long giftId, Gift gift){

return GetGiftResponseDto.builder()
Expand Down

0 comments on commit 6ff743c

Please sign in to comment.