From df352a86a0ae84a0454ccb6fa5409cd2dd1047e1 Mon Sep 17 00:00:00 2001 From: bum12ark Date: Fri, 4 Mar 2022 18:04:55 +0900 Subject: [PATCH] =?UTF-8?q?feat(store):=20=EB=A7=A4=EC=9E=A5=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20API=20=EC=A6=90=EA=B2=A8=EC=B0=BE=EA=B8=B0=20?= =?UTF-8?q?=ED=9A=8C=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 거리순으로 가까운 매장 조회 후 즐겨찾기 회수 검색 --- .../repository/FavoriteStoreCustom.java | 22 +++++++++++++++++++ .../domain/store/dto/SearchStoreResult.java | 12 ++++++++++ .../store/service/StoreServiceImpl.java | 12 +++++++++- .../domain/store/web/StoreController.java | 4 +++- 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/repository/FavoriteStoreCustom.java 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;