From 84985a08e9b4440d56c30b91bd7c7485716ffac3 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Thu, 17 Jul 2025 17:47:10 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor(Statistics):=20=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=20=EA=B0=9D=EC=B2=B4=EC=97=90=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20url=20=ED=8F=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statistic/dto/StoreRankingDto.java | 4 ++- .../service/impl/RankingServiceImpl.java | 5 ++-- .../statistic/dto/StoreInfo.java | 4 ++- .../StatisticCustomRepositoryImpl.java | 29 ++++++++++++------- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/dto/StoreRankingDto.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/dto/StoreRankingDto.java index a5d0601a..0c40c84f 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/dto/StoreRankingDto.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/dto/StoreRankingDto.java @@ -11,9 +11,10 @@ public class StoreRankingDto { private final Integer totalSales; private final Long currentRank; private final Integer delta; + private final String profileUrl; public StoreRankingDto(Long storeId, String storeName, Long departmentId, String departmentName, Integer totalSales, - Long currentRank, Integer delta) { + Long currentRank, Integer delta, String profileUrl) { this.storeId = storeId; this.storeName = storeName; this.departmentId = departmentId; @@ -21,5 +22,6 @@ public StoreRankingDto(Long storeId, String storeName, Long departmentId, String this.totalSales = totalSales; this.currentRank = currentRank; this.delta = delta; + this.profileUrl = profileUrl; } } diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/service/impl/RankingServiceImpl.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/service/impl/RankingServiceImpl.java index 9b5d764b..af206acc 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/service/impl/RankingServiceImpl.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/service/impl/RankingServiceImpl.java @@ -45,7 +45,7 @@ public List getStatisticsRankings(MemberDetails memberDetails) // 1) Redis에서 Top4+내주점: storeId, totalSales, currentRank, delta List entries = rankingQuery.getRankings(userStoreId, 5); - // 2) DB에서 store 정보 가져오기 + // 2) redis 에서 storeId 정보 가져오기 List storeIds = entries.stream() .map(RankingEntry::getStoreId) .toList(); @@ -67,7 +67,8 @@ public List getStatisticsRankings(MemberDetails memberDetails) info.getDepartmentName(), e.getTotalSales(), e.getCurrentRank(), - e.getDelta() + e.getDelta(), + info.getProfileUrl() ); }) .collect(Collectors.toList()); diff --git a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/dto/StoreInfo.java b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/dto/StoreInfo.java index 893503bf..c50981b7 100644 --- a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/dto/StoreInfo.java +++ b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/dto/StoreInfo.java @@ -8,11 +8,13 @@ public class StoreInfo { private final String storeName; private final Long departmentId; private final String departmentName; + private final String profileUrl; - public StoreInfo(Long storeId, String storeName, Long departmentId, String departmentName) { + public StoreInfo(Long storeId, String storeName, Long departmentId, String departmentName, String profileUrl) { this.storeId = storeId; this.storeName = storeName; this.departmentId = departmentId; this.departmentName = departmentName; + this.profileUrl = profileUrl; } } diff --git a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java index 440c13a6..ee0d92a7 100644 --- a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java +++ b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java @@ -21,11 +21,17 @@ import com.nowait.domainadminrdb.statistic.dto.TopSalesStoresDetail; import com.nowait.domaincorerdb.department.entity.QDepartment; import com.nowait.domaincorerdb.order.entity.QUserOrder; +import com.nowait.domaincorerdb.store.entity.ImageType; import com.nowait.domaincorerdb.store.entity.QStore; +import com.nowait.domaincorerdb.store.entity.QStoreImage; import com.querydsl.core.Tuple; +import com.querydsl.core.types.Expression; import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.extern.slf4j.Slf4j; + @Repository +@Slf4j public class StatisticCustomRepositoryImpl implements StatisticCustomRepository { private final JPAQueryFactory queryFactory; @@ -35,8 +41,9 @@ public StatisticCustomRepositoryImpl(JPAQueryFactory queryFactory) { } private static final QUserOrder u = QUserOrder.userOrder; - private static final QStore s = store; + private static final QStore s = QStore.store; private static final QDepartment d = QDepartment.department; + private static final QStoreImage si = QStoreImage.storeImage; @Override public OrderSalesSumDetail findSalesSumByStoreId(Long storeId) { @@ -262,8 +269,6 @@ private Map getDepartmentNames(Set departmentIds) { return departmentNameMap; } - - // redis 사용하는 부분 @Override public List findTotalSales() { @@ -294,18 +299,20 @@ public List findTotalSales() { @Override public List findStoreInfoByIds(List storeIds) { List tuples = queryFactory - .select(s.storeId, s.name, store.departmentId, d.name) - .from(store) - .join(d).on(store.departmentId.eq(d.id)) - .where(store.storeId.in(storeIds)) + .select(s.storeId, s.name, store.departmentId, d.name, si.imageUrl.coalesce("")) + .from(s) + .join(d).on(s.departmentId.eq(d.id)) + .leftJoin(si).on(s.storeId.eq(si.store.storeId).and(si.imageType.eq(ImageType.PROFILE))) + .where(s.storeId.in(storeIds)) .fetch(); return tuples.stream() .map(t -> new StoreInfo( - t.get(store.storeId), - t.get(store.name), - t.get(store.departmentId), - t.get(d.name) + t.get(s.storeId), + t.get(s.name), + t.get(s.departmentId), + t.get(d.name), + t.get(si.imageUrl.coalesce("")) )) .collect(Collectors.toList()); } From c488e31d946dfa0771e37900e6cd0b4dd7a318f7 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Thu, 17 Jul 2025 17:54:09 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor(Statistics):=20QueryDSL=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=B0=B8=EC=A1=B0=20=EB=AA=85=EC=B9=AD=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statistic/repository/StatisticCustomRepositoryImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java index ee0d92a7..0985b9b9 100644 --- a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java +++ b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java @@ -25,7 +25,6 @@ import com.nowait.domaincorerdb.store.entity.QStore; import com.nowait.domaincorerdb.store.entity.QStoreImage; import com.querydsl.core.Tuple; -import com.querydsl.core.types.Expression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.extern.slf4j.Slf4j; @@ -299,7 +298,7 @@ public List findTotalSales() { @Override public List findStoreInfoByIds(List storeIds) { List tuples = queryFactory - .select(s.storeId, s.name, store.departmentId, d.name, si.imageUrl.coalesce("")) + .select(s.storeId, s.name, s.departmentId, d.name, si.imageUrl.coalesce("")) .from(s) .join(d).on(s.departmentId.eq(d.id)) .leftJoin(si).on(s.storeId.eq(si.store.storeId).and(si.imageType.eq(ImageType.PROFILE)))