From 2481cb85ccfa67fdf2c60b6e9e2841b095d75233 Mon Sep 17 00:00:00 2001 From: JSoi Date: Fri, 29 Jul 2022 17:57:22 +0900 Subject: [PATCH] =?UTF-8?q?#18=20[Refactor]=20OrderSpecifier=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C=20&=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/StoreQueryRepository.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/mpnp/baechelin/store/repository/StoreQueryRepository.java b/src/main/java/com/mpnp/baechelin/store/repository/StoreQueryRepository.java index 5d037a0..1c6875d 100644 --- a/src/main/java/com/mpnp/baechelin/store/repository/StoreQueryRepository.java +++ b/src/main/java/com/mpnp/baechelin/store/repository/StoreQueryRepository.java @@ -2,9 +2,12 @@ import com.mpnp.baechelin.common.QueryDslSearch; import com.mpnp.baechelin.common.QuerydslLocation; +import com.mpnp.baechelin.review.domain.Review; +import com.mpnp.baechelin.store.domain.QStore; import com.mpnp.baechelin.store.domain.Store; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.Tuple; +import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberPath; @@ -46,22 +49,22 @@ public Page findBetweenOnePointOrder(BigDecimal latStart, BigDecimal nowLat = (latStart.add(latEnd)).divide(new BigDecimal("2"), 22, RoundingMode.HALF_UP); BigDecimal nowLng = (lngStart.add(lngEnd)).divide(new BigDecimal("2"), 22, RoundingMode.HALF_UP); BooleanBuilder builder = QuerydslLocation.locAndConditions(latStart, latEnd, lngStart, lngEnd, category, facility); - NumberPath diff = Expressions.numberPath(BigDecimal.class, "diff"); - List tupleList = + List storeList = queryFactory - .select(store, - store.latitude.subtract(nowLat).abs().add(store.longitude.subtract(nowLng)).abs().as(diff)) - .from(store) + .selectFrom(store) .where(builder) - .orderBy(diff.asc()) + .orderBy(orderDistance(nowLat, nowLng)) .limit(pageable.getPageSize()) .offset(pageable.getOffset()) .fetch(); - List storeList = tupleList.stream().map(tuple -> tuple.get(store)).collect(Collectors.toList()); int fetchCount = queryFactory.selectFrom(store).where(builder).fetch().size(); return new PageImpl<>(storeList, pageable, fetchCount); } + private OrderSpecifier orderDistance(BigDecimal nowLat, BigDecimal nowLng){ + return QStore.store.latitude.subtract(nowLat).abs().add(QStore.store.longitude.subtract(nowLng)).abs().asc(); + } + //TODO 별점순 - 쿼리 결과로 산출된 리스트의 평균 구하기, 정렬, 페이징 public Page findStoreOrderByPoint(BigDecimal lat, BigDecimal lng, @@ -70,19 +73,14 @@ public Page findStoreOrderByPoint(BigDecimal lat, Pageable pageable) { BooleanBuilder builder = locTwoPointAndConditions(lat, lng, category, facility); - NumberPath diff = Expressions.numberPath(BigDecimal.class, "diff"); - List tupleList = queryFactory - .select(store, - store.latitude.subtract(lat).abs().add(store.longitude.subtract(lng)).abs().as(diff)) - .from(store) + List storeList = queryFactory + .selectFrom(store) .where(builder) .orderBy(store.pointAvg.desc()) - .orderBy(diff.asc()) + .orderBy(orderDistance(lat,lng)) .limit(pageable.getPageSize()) .offset(pageable.getOffset()) .fetch(); - - List storeList = tupleList.stream().map(tuple -> tuple.get(store)).collect(Collectors.toList()); int fetchCount = queryFactory.selectFrom(store).where(builder).fetch().size(); return new PageImpl<>(storeList, pageable, fetchCount); } @@ -95,10 +93,10 @@ public Page findStoreOrderByBookmark(BigDecimal lat, Pageable pageable) { BooleanBuilder builder = locTwoPointAndConditions(lat, lng, category, facility); - List storeList = queryFactory.selectFrom(store) .where(builder) .orderBy(store.bookMarkCount.desc()) + .orderBy(orderDistance(lat,lng)) .limit(pageable.getPageSize()) .offset(pageable.getOffset()) .fetch();