Skip to content

Commit 4bcb963

Browse files
authored
[REFACTOR] 검색 디렉토리 분리 및 쿼리 리팩토링 (#341)
* refactor(search): 검색 기능 분리 및 elastic 서버 연결 유무에 따른 api 수정 - elastic search enabled = true -> elastic search 검색 - elastic search enabled = false -> rdb 검색 - elastic search healthcheck를 통한 서버 연결 확인 기능 추가 * test(search): 검색 기능 분리 및 elastic 서버 연결 유무에 따라 test 수정 및 추가 - elastic search enabled = true -> test 실행 (local에서 테스트 시 사용 예정) - elastic search enabled = false -> test ignore * test(search): import 수정 * test(search): controller test 수정 - elastic search 서버 연결 여부에 따른 분기 추가 * refactor(search): 커뮤니티 Document 필드 추가 - writerNickname, createdAt 필드 추가 - elastic search 검색 조건에 writerNickname 및 가중치 추가 * refactor(search): 커뮤니티 검색 쿼리 수정 - ResponseDto에 fromDocument 추가 - 기존) elastic search에서 검색 결과 글 id 반환 -> id로 rdb에서 검색 후 communityBoardView 반환 수정) elastic search 검색 결과인 communityDocument 전체 반환 * test(search): 커뮤니티 검색 리팩토링에 따른 test 수정 * refactor(search): 커뮤니티 Document updatedAt 필드 추가 * refactor(search): 커뮤니티 게시글 findAll() -> findAllByDeletedFalse() - elasticsearch 저장을 위한 전체 게시글 조회 메서드 변경 * refactor(search): 개행 수정 * refactor(search): 커뮤니티 검색 test를 위한 delete 메서드 수정 * feat(center): center id로 기관명 조회하는 로직 추가 * test(center): center id로 기관명 조회하는 로직 test 추가 * refactor(search): community elastic search 검색 메서드명 변경 * refactor(search): 커뮤니티 게시글 검색 쿼리 수정 - 유사어 검색 쿼리 추가 * refactor(search): 봉사활동 모집글 document 필드 추가 및 responseDto에 fromDocument 추가 - RecruitBoardWithCenterResponseDto, RecruitBoardDetailResponseDto에 포함되는 필드 모두 추가 - RecruitBoardWithCenterResponseDto, RecruitBoardDetailResponseDto에 fromDocument 추가 * refactor(recruit_board): 기존 findAll() -> findAllByDeletedFalse() 수정 - elasticsearch index 저장을 위한 전체 데이터 조회 시 deleted 조건 추가 * refactor(search): 봉사활동 모집글 검색 쿼리 리팩토링 - 기존) elastic search에서 검색 결과 글 id 반환 -> id로 rdb에서 검색 후 반환 수정) elastic search 검색 결과인 recruitBoardDocument 전체 반환 - 근처 모집글 검색의 경우 elastic search의 geo_point로 매핑하여 검색하도록 리팩토링 - 유사어 검색 쿼리 추가 * test(search): scheduler test 수정 * refactor(search): 중복 코드 추출 * refactor(search): 미구현 코드 recruitboard로 이동 - 특정 기관 모집글 조회 RecruitBoardQueryApiController로 이동 (추후 개발 후 다시 이동) * test(search): 봉사활동 모집글 검색 쿼리 리팩토링에 따른 test 수정 * fix(search): search 디렉토리 커버리지 제외 * refactor(search): 불필요한 코드 삭제 * refactor(search): 코드리뷰 사항 반영 - findDynamicField -> findDynamicFieldByCenterId 네이밍 수정 - recruitboard 조회 쿼리문 형식 수정 - elastic search 활성화 확인 어노테이션 생성 및 적용 - 검색 컨트롤러 else 제거 - elastic search 저장 scheduler 로직 순서 수정 (활성화 체크 우선) - * refactor(search): 소나큐브 반영 - 불필요한 import 제거 - null 처리 추가
1 parent 9fd9245 commit 4bcb963

File tree

73 files changed

+1962
-1526
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+1962
-1526
lines changed

build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ def jacocoExcludePatterns = [
139139
'**/event/**',
140140
'**/*Aspect*',
141141
'**/Aspect/*',
142-
'**/utils/*'
142+
'**/utils/*',
143+
'**/search/**'
143144
]
144145

145146
def jacocoExcludePatternsForVerify = [
@@ -161,7 +162,8 @@ def jacocoExcludePatternsForVerify = [
161162
'*.*event*.*',
162163
'*.*Aspect*',
163164
'*.Aspect.*',
164-
'*.utils.*'
165+
'*.utils.*',
166+
'*.search.*'
165167
]
166168

167169
jacocoTestReport {

src/main/java/com/somemore/domains/center/repository/center/CenterRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ default boolean doesNotExistById(UUID id) {
2121
List<CenterOverviewInfo> findCenterOverviewsByIds(List<UUID> ids);
2222

2323
void deleteAllInBatch();
24+
25+
String findNameById(UUID id);
2426
}

src/main/java/com/somemore/domains/center/repository/center/CenterRepositoryImpl.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.somemore.domains.center.repository.center;
22

3+
import com.querydsl.core.types.Path;
34
import com.querydsl.core.types.Projections;
45
import com.querydsl.core.types.dsl.BooleanExpression;
56
import com.querydsl.jpa.impl.JPAQueryFactory;
@@ -66,7 +67,27 @@ public void deleteAllInBatch() {
6667
centerJpaRepository.deleteAllInBatch();
6768
}
6869

70+
@Override
71+
public String findNameById(UUID id) {
72+
return findDynamicFieldByCenterId(id, center.name)
73+
.orElse(null);
74+
}
75+
6976
private static BooleanExpression isNotDeleted() {
7077
return center.deleted.isFalse();
7178
}
79+
80+
private <T> Optional<T> findDynamicFieldByCenterId(UUID id, Path<T> field) {
81+
82+
return Optional.ofNullable(
83+
queryFactory
84+
.select(field)
85+
.from(center)
86+
.where(
87+
center.id.eq(id),
88+
isNotDeleted()
89+
)
90+
.fetchOne()
91+
);
92+
}
7293
}

src/main/java/com/somemore/domains/center/service/query/CenterQueryService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,17 @@ public void validateCenterExists(UUID id) {
4646
}
4747
}
4848

49+
@Override
50+
public String getNameById(UUID id) {
51+
String name = centerRepository.findNameById(id);
52+
53+
if (name == null || name.isBlank()) {
54+
throw new BadRequestException(NOT_EXISTS_CENTER);
55+
}
56+
57+
return name;
58+
}
59+
4960
private Center getCenterById(UUID centerId) {
5061
return centerRepository.findCenterById(centerId)
5162
.orElseThrow(() -> new BadRequestException(NOT_EXISTS_CENTER.getMessage()));

src/main/java/com/somemore/domains/center/usecase/query/CenterQueryUseCase.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ public interface CenterQueryUseCase {
1212
List<CenterOverviewInfo> getCenterOverviewsByIds(List<UUID> centerIds);
1313

1414
void validateCenterExists(UUID centerId);
15+
String getNameById(UUID id);
1516
}

src/main/java/com/somemore/domains/community/controller/CommunityBoardQueryApiController.java

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.springframework.web.bind.annotation.GetMapping;
1313
import org.springframework.web.bind.annotation.PathVariable;
1414
import org.springframework.web.bind.annotation.RequestMapping;
15-
import org.springframework.web.bind.annotation.RequestParam;
1615
import org.springframework.web.bind.annotation.RestController;
1716

1817
import java.util.UUID;
@@ -24,7 +23,6 @@
2423
public class CommunityBoardQueryApiController {
2524

2625
private final CommunityBoardQueryUseCase communityBoardQueryUseCase;
27-
// private final CommunityBoardDocumentUseCase communityBoardDocumentUseCase;
2826

2927
@GetMapping("/community-boards")
3028
@Operation(summary = "전체 커뮤니티 게시글 조회", description = "전체 커뮤니티 게시글 목록을 조회합니다.")
@@ -51,32 +49,6 @@ public ApiResponse<Page<CommunityBoardResponseDto>> getByWriterId(
5149
);
5250
}
5351

54-
// @GetMapping("/community-boards/search")
55-
// @Operation(summary = "커뮤니티 게시글 키워드 검색", description = "키워드로 포함한 커뮤니티 게시글 목록을 조회합니다.")
56-
// public ApiResponse<Page<CommunityBoardResponseDto>> getCommunityBoardsBySearch(
57-
// String keyword,
58-
// Pageable pageable
59-
// ) {
60-
// return ApiResponse.ok(
61-
// 200,
62-
// communityBoardDocumentUseCase.getCommunityBoardBySearch(keyword, pageable.getPageNumber()),
63-
// "커뮤니티 게시글 검색 리스트 조회 성공"
64-
// );
65-
// }
66-
67-
@GetMapping("/community-boards/search")
68-
@Operation(summary = "커뮤니티 게시글 키워드 검색", description = "키워드를 포함한 커뮤니티 게시글 목록을 조회합니다.")
69-
public ApiResponse<Page<CommunityBoardResponseDto>> getCommunityBoardsBySearch(
70-
@RequestParam String keyword,
71-
Pageable pageable
72-
) {
73-
return ApiResponse.ok(
74-
200,
75-
communityBoardQueryUseCase.getCommunityBoards(keyword, pageable.getPageNumber()),
76-
"커뮤니티 게시글 검색 리스트 조회 성공"
77-
);
78-
}
79-
8052
@GetMapping("/community-board/{id}")
8153
@Operation(summary = "커뮤니티 게시글 상세 조회", description = "커뮤니티 게시글의 상세 정보를 조회합니다.")
8254
public ApiResponse<CommunityBoardDetailResponseDto> getById(

src/main/java/com/somemore/domains/community/domain/CommunityBoardDocument.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/main/java/com/somemore/domains/community/domain/CommunityComment.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import static lombok.AccessLevel.PROTECTED;
1919

20-
2120
@Getter
2221
@NoArgsConstructor(access = PROTECTED)
2322
@Entity

src/main/java/com/somemore/domains/community/dto/response/CommunityBoardResponseDto.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
44
import com.fasterxml.jackson.databind.annotation.JsonNaming;
55
import com.somemore.domains.community.repository.mapper.CommunityBoardView;
6+
import com.somemore.domains.search.domain.CommunityBoardDocument;
67
import io.swagger.v3.oas.annotations.media.Schema;
78

89
import java.time.LocalDateTime;
@@ -12,9 +13,9 @@
1213
public record CommunityBoardResponseDto(
1314
@Schema(description = "커뮤니티 게시글 ID", example = "12")
1415
Long id,
15-
@Schema(description = "커뮤니티 게시글 ID", example = "12")
16+
@Schema(description = "커뮤니티 게시글 제목", example = "11/29 OO도서관 봉사 같이 갈 사람 모집합니다.")
1617
String title,
17-
@Schema(description = "작성자(봉사자) ID", example = "123e4567-e89b-12d3-a456-426614174000")
18+
@Schema(description = "작성자(봉사자) 닉네임", example = "나는야 봉사왕")
1819
String writerNickname,
1920
@Schema(description = "커뮤니티 게시글 생성 일시", example = "2023-12-02T11:00:00")
2021
LocalDateTime createdAt
@@ -27,5 +28,13 @@ public static CommunityBoardResponseDto from(CommunityBoardView board) {
2728
board.communityBoard().getCreatedAt()
2829
);
2930
}
30-
}
3131

32+
public static CommunityBoardResponseDto fromDocument(CommunityBoardDocument board) {
33+
return new CommunityBoardResponseDto(
34+
board.getId(),
35+
board.getTitle(),
36+
board.getWriterNickname(),
37+
board.getCreatedAt()
38+
);
39+
}
40+
}

src/main/java/com/somemore/domains/community/repository/board/CommunityBoardDocumentRepository.java

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)