From a3a4b332e041ae3bbc63ac6815d0bf9230138d72 Mon Sep 17 00:00:00 2001 From: Yu-jimin Date: Thu, 8 Feb 2024 18:25:18 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=EC=9B=94=EB=B3=84=20=ED=98=9C?= =?UTF-8?q?=ED=83=9D=20=EC=A1=B0=ED=9A=8C=20api=20=EA=B5=AC=ED=98=84=20(#3?= =?UTF-8?q?6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../card/controller/CardController.java | 11 ++++ .../card/dto/MontlyBenefitResponseDto.java | 34 ++++++++++++ .../once/domain/card/service/CardService.java | 54 +++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 src/main/java/ewha/lux/once/domain/card/dto/MontlyBenefitResponseDto.java diff --git a/src/main/java/ewha/lux/once/domain/card/controller/CardController.java b/src/main/java/ewha/lux/once/domain/card/controller/CardController.java index bc37b0e..5f4b4bc 100644 --- a/src/main/java/ewha/lux/once/domain/card/controller/CardController.java +++ b/src/main/java/ewha/lux/once/domain/card/controller/CardController.java @@ -41,4 +41,15 @@ public CommonResponse cardPerformance(@AuthenticationPrincipal UserAccount us return new CommonResponse<>(e.getStatus()); } } + + // [Get] 월별 혜택 조회 + @GetMapping("/benefit") + @ResponseBody + public CommonResponse montlyBenefitInfo(@AuthenticationPrincipal UserAccount user, @RequestParam int month) { + try { + return new CommonResponse<>(ResponseCode.SUCCESS, cardService.getMontlyBenefitInfo(user.getUsers(), month)); + } catch (CustomException e) { + return new CommonResponse<>(e.getStatus()); + } + } } diff --git a/src/main/java/ewha/lux/once/domain/card/dto/MontlyBenefitResponseDto.java b/src/main/java/ewha/lux/once/domain/card/dto/MontlyBenefitResponseDto.java new file mode 100644 index 0000000..0a47a90 --- /dev/null +++ b/src/main/java/ewha/lux/once/domain/card/dto/MontlyBenefitResponseDto.java @@ -0,0 +1,34 @@ +package ewha.lux.once.domain.card.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +public class MontlyBenefitResponseDto { + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + public static class MontlyBenefitProfileDto { + private int month; + private int receivedSum; + private int benefitGoal; + private int remainBenefit; + List benefitList; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + public static class BenefitListDto { + private String category; + private int discountPriceSum; + private int priceSum; + } + +} diff --git a/src/main/java/ewha/lux/once/domain/card/service/CardService.java b/src/main/java/ewha/lux/once/domain/card/service/CardService.java index d1af679..025ecff 100644 --- a/src/main/java/ewha/lux/once/domain/card/service/CardService.java +++ b/src/main/java/ewha/lux/once/domain/card/service/CardService.java @@ -1,23 +1,32 @@ package ewha.lux.once.domain.card.service; import ewha.lux.once.domain.card.dto.CardPerformanceRequestDto; +import ewha.lux.once.domain.card.dto.MontlyBenefitResponseDto; import ewha.lux.once.domain.card.dto.MyWalletResponseDto; +import ewha.lux.once.domain.card.entity.Card; import ewha.lux.once.domain.card.entity.OwnedCard; +import ewha.lux.once.domain.home.entity.ChatHistory; import ewha.lux.once.domain.user.entity.Users; import ewha.lux.once.global.common.CustomException; import ewha.lux.once.global.common.ResponseCode; +import ewha.lux.once.global.repository.CardRepository; +import ewha.lux.once.global.repository.ChatHistoryRepository; import ewha.lux.once.global.repository.OwnedCardRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class CardService { private final OwnedCardRepository ownedCardRepository; + private final ChatHistoryRepository chatHistoryRepository; public MyWalletResponseDto.MyWalletProfileDto getMyWalletInfo(Users nowUser) throws CustomException { List ownedCards = ownedCardRepository.findOwnedCardByUsers(nowUser); @@ -60,6 +69,51 @@ public void postCardPerformance(Users nowUser, CardPerformanceRequestDto cardPer return; } + public MontlyBenefitResponseDto.MontlyBenefitProfileDto getMontlyBenefitInfo(Users nowUser, int month) throws CustomException { + List chatHistories = chatHistoryRepository.findByUsers(nowUser); + if(chatHistories.isEmpty()){ + new CustomException(ResponseCode.CHAT_HISTORY_NOT_FOUND); + } + + int receivedSum = chatHistories.stream() + .filter(chatHistory -> chatHistory.isHasPaid()) + .mapToInt(ChatHistory::getPaymentAmount) + .sum(); + + List categories = chatHistories.stream() + .filter(chatHistory -> chatHistory.isHasPaid() && chatHistory.getCreatedAt().getMonthValue() == month) + .map(ChatHistory::getCategory) + .distinct() + .collect(Collectors.toList()); + + Map categoryGetDiscount = chatHistories.stream() + .filter(chatHistory -> chatHistory.isHasPaid() && chatHistory.getCreatedAt().getMonthValue() == month) + .collect(Collectors.groupingBy(ChatHistory::getCategory, Collectors.summingInt(ChatHistory::getDiscount))); + + Map categoryGetPaymentAmount = chatHistories.stream() + .filter(chatHistory -> chatHistory.isHasPaid() && chatHistory.getCreatedAt().getMonthValue() == month) + .collect(Collectors.groupingBy( + ChatHistory::getCategory, + Collectors.summingInt(chatHistory -> chatHistory.getPaymentAmount() - chatHistory.getDiscount()) + )); + + List benefitList = categories.stream() + .map(category -> new MontlyBenefitResponseDto.BenefitListDto( + category, + categoryGetDiscount.getOrDefault(category,0), + categoryGetPaymentAmount.getOrDefault(category,0) + )) + .collect(Collectors.toList()); + + return MontlyBenefitResponseDto.MontlyBenefitProfileDto.builder() + .month(month) + .receivedSum(receivedSum) + .benefitGoal(nowUser.getBenefitGoal()) + .remainBenefit(nowUser.getBenefitGoal() - receivedSum) + .benefitList(benefitList) + .build(); + } + private List splitCardSummary(String cardSummary) { List cardBenefitList = new ArrayList<>(); String[] sections = cardSummary.split("###"); From a8b2b5ee74287db3db58036a26198ea2695f0593 Mon Sep 17 00:00:00 2001 From: Yu-jimin Date: Thu, 8 Feb 2024 18:28:42 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=EB=B0=9B=EC=9D=80=20=ED=98=9C?= =?UTF-8?q?=ED=83=9D=20=EA=B8=88=EC=95=A1=EC=97=90=20=EC=9B=94=EB=B3=84=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=B6=94=EA=B0=80=20(#36)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ewha/lux/once/domain/card/service/CardService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ewha/lux/once/domain/card/service/CardService.java b/src/main/java/ewha/lux/once/domain/card/service/CardService.java index 025ecff..49c4bdb 100644 --- a/src/main/java/ewha/lux/once/domain/card/service/CardService.java +++ b/src/main/java/ewha/lux/once/domain/card/service/CardService.java @@ -76,7 +76,7 @@ public MontlyBenefitResponseDto.MontlyBenefitProfileDto getMontlyBenefitInfo(Use } int receivedSum = chatHistories.stream() - .filter(chatHistory -> chatHistory.isHasPaid()) + .filter(chatHistory -> chatHistory.isHasPaid() && chatHistory.getCreatedAt().getMonthValue() == month) .mapToInt(ChatHistory::getPaymentAmount) .sum(); From f4de8d7aaa0c95a024132655f3e3bbe75cad74e3 Mon Sep 17 00:00:00 2001 From: Yu-jimin Date: Thu, 8 Feb 2024 19:01:07 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=EB=AA=A9=ED=91=9C=20=ED=98=9C?= =?UTF-8?q?=ED=83=9D=20=EA=B8=88=EC=95=A1=20=EC=9E=85=EB=A0=A5=20api=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#36)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/card/controller/CardController.java | 13 +++++++++++++ .../once/domain/card/dto/CardGoalRequestDto.java | 14 ++++++++++++++ .../lux/once/domain/card/service/CardService.java | 9 +++++++++ .../ewha/lux/once/domain/user/entity/Users.java | 1 + 4 files changed, 37 insertions(+) create mode 100644 src/main/java/ewha/lux/once/domain/card/dto/CardGoalRequestDto.java diff --git a/src/main/java/ewha/lux/once/domain/card/controller/CardController.java b/src/main/java/ewha/lux/once/domain/card/controller/CardController.java index 5f4b4bc..7d0ee61 100644 --- a/src/main/java/ewha/lux/once/domain/card/controller/CardController.java +++ b/src/main/java/ewha/lux/once/domain/card/controller/CardController.java @@ -1,5 +1,6 @@ package ewha.lux.once.domain.card.controller; +import ewha.lux.once.domain.card.dto.CardGoalRequestDto; import ewha.lux.once.domain.card.dto.CardPerformanceRequestDto; import ewha.lux.once.domain.card.service.CardService; import ewha.lux.once.global.common.CommonResponse; @@ -52,4 +53,16 @@ public CommonResponse montlyBenefitInfo(@AuthenticationPrincipal UserAccount return new CommonResponse<>(e.getStatus()); } } + + // [Post] 카드 목표 혜택 금액 입력 + @PostMapping("/benefitgoal") + @ResponseBody + public CommonResponse cardGoal(@AuthenticationPrincipal UserAccount user, @RequestBody CardGoalRequestDto cardGoalRequestDto) { + try { + cardService.postBenefitGoal(user.getUsers(), cardGoalRequestDto); + return new CommonResponse<>(ResponseCode.SUCCESS); + } catch (CustomException e) { + return new CommonResponse<>(e.getStatus()); + } + } } diff --git a/src/main/java/ewha/lux/once/domain/card/dto/CardGoalRequestDto.java b/src/main/java/ewha/lux/once/domain/card/dto/CardGoalRequestDto.java new file mode 100644 index 0000000..ca0a539 --- /dev/null +++ b/src/main/java/ewha/lux/once/domain/card/dto/CardGoalRequestDto.java @@ -0,0 +1,14 @@ +package ewha.lux.once.domain.card.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CardGoalRequestDto { + private int benefitGoal; +} diff --git a/src/main/java/ewha/lux/once/domain/card/service/CardService.java b/src/main/java/ewha/lux/once/domain/card/service/CardService.java index 49c4bdb..337a5b8 100644 --- a/src/main/java/ewha/lux/once/domain/card/service/CardService.java +++ b/src/main/java/ewha/lux/once/domain/card/service/CardService.java @@ -1,5 +1,6 @@ package ewha.lux.once.domain.card.service; +import ewha.lux.once.domain.card.dto.CardGoalRequestDto; import ewha.lux.once.domain.card.dto.CardPerformanceRequestDto; import ewha.lux.once.domain.card.dto.MontlyBenefitResponseDto; import ewha.lux.once.domain.card.dto.MyWalletResponseDto; @@ -12,6 +13,7 @@ import ewha.lux.once.global.repository.CardRepository; import ewha.lux.once.global.repository.ChatHistoryRepository; import ewha.lux.once.global.repository.OwnedCardRepository; +import ewha.lux.once.global.repository.UsersRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -27,6 +29,7 @@ public class CardService { private final OwnedCardRepository ownedCardRepository; private final ChatHistoryRepository chatHistoryRepository; + private final UsersRepository usersRepository; public MyWalletResponseDto.MyWalletProfileDto getMyWalletInfo(Users nowUser) throws CustomException { List ownedCards = ownedCardRepository.findOwnedCardByUsers(nowUser); @@ -114,6 +117,12 @@ public MontlyBenefitResponseDto.MontlyBenefitProfileDto getMontlyBenefitInfo(Use .build(); } + public void postBenefitGoal(Users nowUser, CardGoalRequestDto cardGoalRequestDto) throws CustomException { + nowUser.setCardGoal(cardGoalRequestDto.getBenefitGoal()); + usersRepository.save(nowUser); + return; + } + private List splitCardSummary(String cardSummary) { List cardBenefitList = new ArrayList<>(); String[] sections = cardSummary.split("###"); diff --git a/src/main/java/ewha/lux/once/domain/user/entity/Users.java b/src/main/java/ewha/lux/once/domain/user/entity/Users.java index 89f8ade..a68f428 100644 --- a/src/main/java/ewha/lux/once/domain/user/entity/Users.java +++ b/src/main/java/ewha/lux/once/domain/user/entity/Users.java @@ -103,4 +103,5 @@ public void updatePassword(String password) { this.password = password; } + public void setCardGoal(int goal) {this.benefitGoal = goal;} }