From a39dfa4b7d0c042b5473a55d6ec0aeabd3a2f0b8 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 23 Jul 2025 18:35:19 +0900 Subject: [PATCH 1/6] =?UTF-8?q?chore:=20=EC=A3=BC=EC=84=9D=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nowait-domain/domain-core-rdb/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/nowait-domain/domain-core-rdb/build.gradle b/nowait-domain/domain-core-rdb/build.gradle index 954fbd42..48bcad51 100644 --- a/nowait-domain/domain-core-rdb/build.gradle +++ b/nowait-domain/domain-core-rdb/build.gradle @@ -39,7 +39,6 @@ dependencies { annotationProcessor 'org.projectlombok:lombok:1.18.26' //QueryDsl - // TODO Q클래스 생성시 오류 발생 해결 필요 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" From a2d490e1184b14dbc32041c9e5ca6e23ae9aa569 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 23 Jul 2025 18:35:39 +0900 Subject: [PATCH 2/6] =?UTF-8?q?refactor(User):=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EC=A0=9C=EC=95=BD=EC=A1=B0=EA=B1=B4=EC=97=90=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applicationadmin/user/dto/ManagerSignupRequestDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/user/dto/ManagerSignupRequestDto.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/user/dto/ManagerSignupRequestDto.java index 8b327e01..7f807bea 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/user/dto/ManagerSignupRequestDto.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/user/dto/ManagerSignupRequestDto.java @@ -28,7 +28,7 @@ public class ManagerSignupRequestDto { private String password; @NotBlank - @Pattern(regexp = "^[a-zA-Z가-힣]{2,12}$") + @Pattern(regexp = "^[a-zA-Z가-힣0-9]{2,12}$", message = "2~12자 사이의 영문, 한글, 숫자만 입력 가능합니다.") @Schema(description = "이름(예시)", example = "김노웻") private String nickname; From a5896d5a6c00efd7535bbad66a9bd19b9ee2c20d Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 23 Jul 2025 18:36:08 +0900 Subject: [PATCH 3/6] =?UTF-8?q?refactor:=20QueryDslConfig=20domain-core?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/nowait/domaincorerdb}/config/QueryDslConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename nowait-domain/{domain-admin-rdb/src/main/java/com/nowait/domainadminrdb => domain-core-rdb/src/main/java/com/nowait/domaincorerdb}/config/QueryDslConfig.java (91%) diff --git a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/config/QueryDslConfig.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/config/QueryDslConfig.java similarity index 91% rename from nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/config/QueryDslConfig.java rename to nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/config/QueryDslConfig.java index 6c04df39..f75d497b 100644 --- a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/config/QueryDslConfig.java +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/config/QueryDslConfig.java @@ -1,4 +1,4 @@ -package com.nowait.domainadminrdb.config; +package com.nowait.domaincorerdb.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; From c5d77572d10eca569ff6b4b58df03d6a9cd54cd5 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 23 Jul 2025 18:36:33 +0900 Subject: [PATCH 4/6] =?UTF-8?q?refactor(Store):=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=20keyword=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applicationuser/store/controller/StoreController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/controller/StoreController.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/controller/StoreController.java index b39a53a8..1373b875 100644 --- a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/controller/StoreController.java +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/controller/StoreController.java @@ -88,12 +88,12 @@ public ResponseEntity getStoreById(@PathVariable Long storeId) { @GetMapping("/search") @Operation(summary = "주점 이름으로 주점 검색", description = "주점 이름을 기준으로 주점을 검색합니다.") @ApiResponse(responseCode = "200", description = "주점 검색 성공") - public ResponseEntity searchStores(@RequestParam("name") String name) { + public ResponseEntity searchStores(@RequestParam("keyword") String keyword) { return ResponseEntity .ok() .body( ApiUtils.success( - storeService.searchStoresByName(name) + storeService.searchByKeywordNative(keyword) ) ); } From cf3574af2619c4ad7c9d0a5c2d3385c06eb9d8b1 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 23 Jul 2025 18:37:04 +0900 Subject: [PATCH 5/6] =?UTF-8?q?refactor(Store):=20QueryDSL=EC=9D=84=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=BB=A4=EC=8A=A4=ED=85=80=20repository=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/repository/StoreCustomRepository.java | 4 ++++ .../repository/StoreCustomRepositoryImpl.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreCustomRepository.java create mode 100644 nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreCustomRepositoryImpl.java diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreCustomRepository.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreCustomRepository.java new file mode 100644 index 00000000..4d6a1f2a --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreCustomRepository.java @@ -0,0 +1,4 @@ +package com.nowait.domaincorerdb.store.repository; + +public interface StoreCustomRepository { +} diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreCustomRepositoryImpl.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreCustomRepositoryImpl.java new file mode 100644 index 00000000..82820c1d --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreCustomRepositoryImpl.java @@ -0,0 +1,17 @@ +package com.nowait.domaincorerdb.store.repository; + +import org.springframework.stereotype.Repository; + +import com.nowait.domaincorerdb.store.entity.QStore; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class StoreCustomRepositoryImpl implements StoreCustomRepository { + + private final JPAQueryFactory queryFactory; + + private final QStore store = QStore.store; +} From a0540aa604769054eab65bb92e418a5f9dd3fb4f Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 23 Jul 2025 18:37:36 +0900 Subject: [PATCH 6/6] =?UTF-8?q?refactor(Store):=20findByNameContainingIgno?= =?UTF-8?q?reCaseAndDeletedFalse=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F=20?= =?UTF-8?q?=ED=92=80=ED=85=8D=EC=8A=A4=ED=8A=B8=EC=9D=B8=EB=8D=B1=EC=8A=A4?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9=EC=9D=84=20=EC=9C=84=ED=95=9C=20searchByK?= =?UTF-8?q?eywordNative=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/service/StoreService.java | 2 +- .../store/service/StoreServiceImpl.java | 7 ++++--- .../store/repository/StoreRepository.java | 20 +++++++++++++------ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreService.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreService.java index 3df99912..78fe8738 100644 --- a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreService.java +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreService.java @@ -19,6 +19,6 @@ public interface StoreService { StorePageReadDto getStoreByStoreId(Long storeId); - List searchStoresByName(String name); + List searchByKeywordNative(String name); } diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreServiceImpl.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreServiceImpl.java index 8b9a5a5e..e365df8f 100644 --- a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreServiceImpl.java +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreServiceImpl.java @@ -144,13 +144,14 @@ public StorePageReadDto getStoreByStoreId(Long storeId) { } @Override - public List searchStoresByName(String name) { - if (name == null || name.isBlank()) { + public List searchByKeywordNative(String keyword) { + if (keyword == null || keyword.isBlank()) { throw new StoreParamEmptyException(); } // 1) 페이징된 Store 스냅샷 조회 - List stores = storeRepository.findByNameContainingIgnoreCaseAndDeletedFalse(name); + // List stores = storeRepository.findByNameContainingIgnoreCaseAndDeletedFalse(keyword); + List stores = storeRepository.searchByKeywordNative(keyword); // 2) 각 StoreId / Department ID 추출 List storeIds = stores.stream() diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreRepository.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreRepository.java index fbc0ebca..283a1a0e 100644 --- a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreRepository.java +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/store/repository/StoreRepository.java @@ -8,22 +8,30 @@ import org.springframework.data.domain.Slice; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.nowait.domaincorerdb.store.entity.Store; @Repository -public interface StoreRepository extends JpaRepository { +public interface StoreRepository extends JpaRepository, StoreCustomRepository { List findAllByDeletedFalse(); Optional findByStoreIdAndDeletedFalse(Long storeId); - List findByNameContainingIgnoreCaseAndDeletedFalse(String name); - Slice findAllByDeletedFalseOrderByStoreIdAsc(Pageable pageable); - // TODO queryDSL으로 전환? - @Query("select s.storeId from Store s where s.isActive = true and s.deleted = false") - List findAllActiveStoreIds(); + @Query(value = """ + SELECT DISTINCT s.* + FROM stores s + LEFT JOIN departments d ON s.department_id = d.id + WHERE s.deleted = false + AND ( + MATCH(s.name) AGAINST(:kw) + OR MATCH(d.name) AGAINST(:kw) + ) + """, + nativeQuery = true) + List searchByKeywordNative(@Param("kw") String booleanKeyword); }