diff --git a/finpik-api/src/main/java/finpik/resolver/loanproduct/application/impl/CreateRecommendLoanProductUseCaseImpl.java b/finpik-api/src/main/java/finpik/resolver/loanproduct/application/impl/CreateRecommendLoanProductUseCaseImpl.java index 65c946b..d3e81da 100644 --- a/finpik-api/src/main/java/finpik/resolver/loanproduct/application/impl/CreateRecommendLoanProductUseCaseImpl.java +++ b/finpik-api/src/main/java/finpik/resolver/loanproduct/application/impl/CreateRecommendLoanProductUseCaseImpl.java @@ -57,7 +57,8 @@ public void execute(CreateRecommendedLoanProductEvent event) { RecommendedLoanProduct first = recommendedLoanProducts.stream() .filter(it -> - it.getLoanProductBadges().contains(LoanProductBadge.LOWEST_MIN_INTEREST_RATE) + it.getLoanProductBadges().stream() + .anyMatch(badge -> badge == LoanProductBadge.LOWEST_MIN_INTEREST_RATE) ).findFirst().orElseThrow(() -> new BusinessException(ErrorCode.EMPTY_BADGES)); profileRepository.updateProfileAfterRecommend( diff --git a/finpik-infra/mysql/src/main/java/finpik/entity/loanproduct/RecommendedLoanProductEntity.java b/finpik-infra/mysql/src/main/java/finpik/entity/loanproduct/RecommendedLoanProductEntity.java index bad1b97..4f27b77 100644 --- a/finpik-infra/mysql/src/main/java/finpik/entity/loanproduct/RecommendedLoanProductEntity.java +++ b/finpik-infra/mysql/src/main/java/finpik/entity/loanproduct/RecommendedLoanProductEntity.java @@ -14,7 +14,6 @@ import java.util.List; import java.util.UUID; -import static jakarta.persistence.FetchType.EAGER; import static jakarta.persistence.FetchType.LAZY; @Entity @@ -30,7 +29,7 @@ public class RecommendedLoanProductEntity { @JoinColumn(name = "loan_product_id") private LoanProductEntity loanProductEntity; private Float similarity; - @ElementCollection(fetch = EAGER) + @ElementCollection(fetch = LAZY) private List loanProductBadgeList; public static RecommendedLoanProductEntity of( diff --git a/finpik-infra/mysql/src/main/java/finpik/jpa/repository/loanproduct/CustomRecommendedLoanProductJpaRepository.java b/finpik-infra/mysql/src/main/java/finpik/jpa/repository/loanproduct/CustomRecommendedLoanProductJpaRepository.java index 69b474e..e916172 100644 --- a/finpik-infra/mysql/src/main/java/finpik/jpa/repository/loanproduct/CustomRecommendedLoanProductJpaRepository.java +++ b/finpik-infra/mysql/src/main/java/finpik/jpa/repository/loanproduct/CustomRecommendedLoanProductJpaRepository.java @@ -5,5 +5,5 @@ import org.springframework.data.domain.Slice; public interface CustomRecommendedLoanProductJpaRepository { - Slice findAllByProfileId(Long productId, Pageable pageable); + Slice findAllByProfileIdPage(Long productId, Pageable pageable); } diff --git a/finpik-infra/mysql/src/main/java/finpik/jpa/repository/loanproduct/impl/CustomRecommendedLoanProductJpaRepositoryImpl.java b/finpik-infra/mysql/src/main/java/finpik/jpa/repository/loanproduct/impl/CustomRecommendedLoanProductJpaRepositoryImpl.java index 9fb69fc..1c03dca 100644 --- a/finpik-infra/mysql/src/main/java/finpik/jpa/repository/loanproduct/impl/CustomRecommendedLoanProductJpaRepositoryImpl.java +++ b/finpik-infra/mysql/src/main/java/finpik/jpa/repository/loanproduct/impl/CustomRecommendedLoanProductJpaRepositoryImpl.java @@ -1,7 +1,6 @@ package finpik.jpa.repository.loanproduct.impl; import com.querydsl.core.types.OrderSpecifier; -import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; import finpik.entity.loanproduct.RecommendedLoanProductEntity; import finpik.jpa.repository.loanproduct.CustomRecommendedLoanProductJpaRepository; @@ -26,7 +25,7 @@ public class CustomRecommendedLoanProductJpaRepositoryImpl implements CustomReco private final JPAQueryFactory jpaQueryFactory; private static final String SIMILARITY_PROPERTY = "similarity"; - public Slice findAllByProfileId(Long profileId, Pageable pageable) { + public Slice findAllByProfileIdPage(Long profileId, Pageable pageable) { List recommendedLoanProducts = jpaQueryFactory .selectFrom(recommendedLoanProductEntity) .leftJoin(recommendedLoanProductEntity.loanProductEntity, loanProductEntity).fetchJoin() diff --git a/finpik-infra/mysql/src/main/java/finpik/repository/loanproduct/impl/LoanProductRepositoryImpl.java b/finpik-infra/mysql/src/main/java/finpik/repository/loanproduct/impl/LoanProductRepositoryImpl.java index 2f81413..456dd6b 100644 --- a/finpik-infra/mysql/src/main/java/finpik/repository/loanproduct/impl/LoanProductRepositoryImpl.java +++ b/finpik-infra/mysql/src/main/java/finpik/repository/loanproduct/impl/LoanProductRepositoryImpl.java @@ -5,7 +5,6 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.UUID; import finpik.LoanProduct; import finpik.RecommendedLoanProduct; @@ -116,25 +115,29 @@ private List toDomainFrom( List entityList, List recommendedLoanProductList ) { - Map loanProductIdToRecommendedId = entityList.stream() + Map loanProductIdToRecommendedId = entityList.stream() .collect(toMap( e -> e.getLoanProductEntity().getId(), - RecommendedLoanProductEntity::getId + e -> e )); return recommendedLoanProductList.stream() - .map(p -> RecommendedLoanProduct.rebuild( - loanProductIdToRecommendedId.get(p.getLoanProductId()), - p.getProfileId(), - p.getBankName(), - p.getLoanProductId(), - p.getProductName(), - p.getInterestRate().maxInterestRate(), - p.getInterestRate().minInterestRate(), - p.getMaxLoanLimitAmount(), - p.getSimilarity(), - p.getLoanProductBadges() - )) + .map(p -> { + RecommendedLoanProductEntity entity = loanProductIdToRecommendedId.get(p.getLoanProductId()); + + return RecommendedLoanProduct.rebuild( + entity.getId(), + p.getProfileId(), + p.getBankName(), + p.getLoanProductId(), + p.getProductName(), + p.getInterestRate().maxInterestRate(), + p.getInterestRate().minInterestRate(), + p.getMaxLoanLimitAmount(), + p.getSimilarity(), + entity.getLoanProductBadgeList() + ); + }) .toList(); } @@ -142,7 +145,7 @@ private List toDomainFrom( @Transactional(readOnly = true) public Slice findAllRecommendedLoanProductSliceByProfileId(Long profileId, Pageable pageable) { Slice recommendedLoanProductList = - recommendedLoanProductJpaRepository.findAllByProfileId(profileId, pageable); + recommendedLoanProductJpaRepository.findAllByProfileIdPage(profileId, pageable); List content = recommendedLoanProductList .stream()