diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/repository/FavoriteStoreCustom.java b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/repository/FavoriteStoreCustom.java new file mode 100644 index 0000000..f386569 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/repository/FavoriteStoreCustom.java @@ -0,0 +1,22 @@ +package com.justpickup.storeservice.domain.favoritestore.repository; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import static com.justpickup.storeservice.domain.favoritestore.entity.QFavoriteStore.favoriteStore; + +@Repository +@RequiredArgsConstructor +public class FavoriteStoreCustom { + + private final JPAQueryFactory queryFactory; + + public Long countFavoriteStoreByStoreId(Long storeId) { + return queryFactory.select(favoriteStore.count()) + .from(favoriteStore) + .join(favoriteStore.store) + .where(favoriteStore.store.id.eq(storeId)) + .fetchOne(); + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/store/dto/SearchStoreResult.java b/store-service/src/main/java/com/justpickup/storeservice/domain/store/dto/SearchStoreResult.java index fbe9f1a..0132ac6 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/store/dto/SearchStoreResult.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/store/dto/SearchStoreResult.java @@ -10,6 +10,17 @@ public class SearchStoreResult { private Long storeId; private String storeName; private Double distanceMeter; + private Long favoriteCounts; + + public SearchStoreResult(Long storeId, String storeName, Double distanceMeter) { + this.storeId = storeId; + this.storeName = storeName; + this.distanceMeter = distanceMeter; + } + + public void setFavoriteCounts(Long favoriteCounts) { + this.favoriteCounts = favoriteCounts; + } public String convertDistanceToString() { // km 으둜 ν‘œμ‹œ @@ -23,4 +34,5 @@ public class SearchStoreResult { // ex) 621m return new DecimalFormat("0").format(distanceMeter) + "m"; } + } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/store/service/StoreServiceImpl.java b/store-service/src/main/java/com/justpickup/storeservice/domain/store/service/StoreServiceImpl.java index 071a2ca..8318e93 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/store/service/StoreServiceImpl.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/store/service/StoreServiceImpl.java @@ -1,5 +1,6 @@ package com.justpickup.storeservice.domain.store.service; +import com.justpickup.storeservice.domain.favoritestore.repository.FavoriteStoreCustom; import com.justpickup.storeservice.domain.store.dto.SearchStoreCondition; import com.justpickup.storeservice.domain.store.dto.SearchStoreResult; import com.justpickup.storeservice.domain.store.repository.StoreRepositoryCustom; @@ -13,9 +14,18 @@ import org.springframework.stereotype.Service; public class StoreServiceImpl implements StoreService { private final StoreRepositoryCustom storeRepositoryCustom; + private final FavoriteStoreCustom favoriteStoreCustom; @Override public SliceImpl findSearchStoreScroll(SearchStoreCondition condition, Pageable pageable) { - return storeRepositoryCustom.findSearchStoreScroll(condition, pageable); + SliceImpl searchStoreScroll = + storeRepositoryCustom.findSearchStoreScroll(condition, pageable); + + searchStoreScroll.forEach(result -> { + Long favoriteCounts = favoriteStoreCustom.countFavoriteStoreByStoreId(result.getStoreId()); + result.setFavoriteCounts(favoriteCounts); + }); + + return searchStoreScroll; } } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/store/web/StoreController.java b/store-service/src/main/java/com/justpickup/storeservice/domain/store/web/StoreController.java index 98fb92e..0ce0651 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/store/web/StoreController.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/store/web/StoreController.java @@ -48,13 +48,15 @@ public class StoreController { private Long id; private String name; private String distance; + private Long favoriteCounts; } public SearchStoreResponse(List content, boolean hasNext) { this.stores = content.stream() .map(result -> new StoreDto( - result.getStoreId(), result.getStoreName(), result.convertDistanceToString()) + result.getStoreId(), result.getStoreName(), + result.convertDistanceToString(), result.getFavoriteCounts()) ) .collect(Collectors.toList()); this.hasNext = hasNext;