Skip to content

Commit

Permalink
Merge pull request #38 from EWHA-LUX/feature/#36
Browse files Browse the repository at this point in the history
  • Loading branch information
Haewonny authored Feb 9, 2024
2 parents 9694b12 + f4de8d7 commit b78d6b3
Show file tree
Hide file tree
Showing 5 changed files with 136 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -41,4 +42,27 @@ 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());
}
}

// [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());
}
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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<MontlyBenefitResponseDto.BenefitListDto> benefitList;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public static class BenefitListDto {
private String category;
private int discountPriceSum;
private int priceSum;
}

}
63 changes: 63 additions & 0 deletions src/main/java/ewha/lux/once/domain/card/service/CardService.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,35 @@
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;
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 ewha.lux.once.global.repository.UsersRepository;
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;
private final UsersRepository usersRepository;

public MyWalletResponseDto.MyWalletProfileDto getMyWalletInfo(Users nowUser) throws CustomException {
List<OwnedCard> ownedCards = ownedCardRepository.findOwnedCardByUsers(nowUser);
Expand Down Expand Up @@ -60,6 +72,57 @@ public void postCardPerformance(Users nowUser, CardPerformanceRequestDto cardPer
return;
}

public MontlyBenefitResponseDto.MontlyBenefitProfileDto getMontlyBenefitInfo(Users nowUser, int month) throws CustomException {
List<ChatHistory> chatHistories = chatHistoryRepository.findByUsers(nowUser);
if(chatHistories.isEmpty()){
new CustomException(ResponseCode.CHAT_HISTORY_NOT_FOUND);
}

int receivedSum = chatHistories.stream()
.filter(chatHistory -> chatHistory.isHasPaid() && chatHistory.getCreatedAt().getMonthValue() == month)
.mapToInt(ChatHistory::getPaymentAmount)
.sum();

List<String> categories = chatHistories.stream()
.filter(chatHistory -> chatHistory.isHasPaid() && chatHistory.getCreatedAt().getMonthValue() == month)
.map(ChatHistory::getCategory)
.distinct()
.collect(Collectors.toList());

Map<String, Integer> categoryGetDiscount = chatHistories.stream()
.filter(chatHistory -> chatHistory.isHasPaid() && chatHistory.getCreatedAt().getMonthValue() == month)
.collect(Collectors.groupingBy(ChatHistory::getCategory, Collectors.summingInt(ChatHistory::getDiscount)));

Map<String, Integer> categoryGetPaymentAmount = chatHistories.stream()
.filter(chatHistory -> chatHistory.isHasPaid() && chatHistory.getCreatedAt().getMonthValue() == month)
.collect(Collectors.groupingBy(
ChatHistory::getCategory,
Collectors.summingInt(chatHistory -> chatHistory.getPaymentAmount() - chatHistory.getDiscount())
));

List<MontlyBenefitResponseDto.BenefitListDto> 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();
}

public void postBenefitGoal(Users nowUser, CardGoalRequestDto cardGoalRequestDto) throws CustomException {
nowUser.setCardGoal(cardGoalRequestDto.getBenefitGoal());
usersRepository.save(nowUser);
return;
}

private List<MyWalletResponseDto.CardBenefitListDto> splitCardSummary(String cardSummary) {
List<MyWalletResponseDto.CardBenefitListDto> cardBenefitList = new ArrayList<>();
String[] sections = cardSummary.split("###");
Expand Down
1 change: 1 addition & 0 deletions src/main/java/ewha/lux/once/domain/user/entity/Users.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,5 @@ public void updatePassword(String password) {
this.password = password;
}

public void setCardGoal(int goal) {this.benefitGoal = goal;}
}

0 comments on commit b78d6b3

Please sign in to comment.