diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/NoteControllerV2.java b/src/main/java/umc/th/juinjang/api/limjang/controller/NoteControllerV2.java index 7b03e5e9..8120692a 100644 --- a/src/main/java/umc/th/juinjang/api/limjang/controller/NoteControllerV2.java +++ b/src/main/java/umc/th/juinjang/api/limjang/controller/NoteControllerV2.java @@ -46,8 +46,9 @@ public ApiResponse createNote(@RequestBody @Valid NotePostRequ @GetMapping("/notes") public ApiResponse findUsersNotes( @RequestParam("sort") LimjangSortOptions sortOptions, + @RequestParam(value = "keyword", required = false) String keyword, @AuthenticationPrincipal Member member) { - return ApiResponse.onSuccess(noteQueryService.findUsersNotes(member, sortOptions)); + return ApiResponse.onSuccess(noteQueryService.findUsersNotes(member, sortOptions, keyword)); } @Operation(summary = "임장 수정 API V2") diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/NoteFinder.java b/src/main/java/umc/th/juinjang/api/limjang/service/NoteFinder.java index 74e78d5a..e96fd7b7 100644 --- a/src/main/java/umc/th/juinjang/api/limjang/service/NoteFinder.java +++ b/src/main/java/umc/th/juinjang/api/limjang/service/NoteFinder.java @@ -18,8 +18,9 @@ public class NoteFinder { private final LimjangRepository limjangRepository; - protected List findAllByMemberOrderByOptions(Member member, LimjangSortOptions sortOptions) { - return limjangRepository.findAllByMemberAndDeletedIsFalseOrderByParamV2(member, sortOptions); + protected List findAllByMemberOrderByOptions(Member member, LimjangSortOptions sortOptions, + String keyword) { + return limjangRepository.findAllByMemberAndDeletedIsFalseOrderByParamV2(member, sortOptions, keyword); } public Limjang getNoteByIdWhereDeletedIsFalse(long id) { diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java b/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java index 5acf2ac8..554ce912 100644 --- a/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java +++ b/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java @@ -38,8 +38,8 @@ public class NoteQueryServiceV2 { private final SharedNoteFinder sharedNoteFinder; @Transactional(readOnly = true) - public UserNotesGetResponse findUsersNotes(Member member, LimjangSortOptions sortOptions) { - List notes = noteFinder.findAllByMemberOrderByOptions(member, sortOptions); + public UserNotesGetResponse findUsersNotes(Member member, LimjangSortOptions sortOptions, String keyword) { + List notes = noteFinder.findAllByMemberOrderByOptions(member, sortOptions, keyword); return UserNotesGetResponse.of(notes, mapToNoteScrapStatus(notes)); } diff --git a/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepository.java b/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepository.java index e22ed524..c1d1e9f9 100644 --- a/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepository.java +++ b/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepository.java @@ -14,5 +14,6 @@ public interface LimjangQueryDslRepository { List findAllByMemberAndDeletedIsFalseOrderByParam(Member member, LimjangSortOptions sort); - List findAllByMemberAndDeletedIsFalseOrderByParamV2(Member member, LimjangSortOptions sort); + List findAllByMemberAndDeletedIsFalseOrderByParamV2(Member member, LimjangSortOptions sort, + String keyword); } diff --git a/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepositoryImpl.java b/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepositoryImpl.java index 5c083e3b..1943c935 100644 --- a/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepositoryImpl.java +++ b/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepositoryImpl.java @@ -65,7 +65,8 @@ public List findAllByMemberAndDeletedIsFalseOrderByParam(Member member, } @Override - public List findAllByMemberAndDeletedIsFalseOrderByParamV2(Member member, LimjangSortOptions sort) { + public List findAllByMemberAndDeletedIsFalseOrderByParamV2(Member member, LimjangSortOptions sort, + String keyword) { return queryFactory .selectFrom(limjang) .join(limjang.limjangPrice, limjangPrice).fetchJoin() @@ -73,10 +74,22 @@ public List findAllByMemberAndDeletedIsFalseOrderByParamV2(Member membe .leftJoin(limjang.report, report).fetchJoin() .where(limjang.memberId.eq(member)) .where(limjang.deleted.isFalse()) + .where(keywordConditionForSearch(keyword)) .orderBy(getOrderByLimjangSortOptions(sort)) .fetch(); } + private BooleanExpression keywordConditionForSearch(String keyword) { + if (keyword == null || keyword.isBlank()) { + return null; + } + return keywordOf( + removeBlank(limjang.nickname).containsIgnoreCase(keyword), + removeBlank(address.roadAddress).containsIgnoreCase(keyword), + removeBlank(address.addressDetail).containsIgnoreCase(keyword) + ); + } + private OrderSpecifier[] getOrderByLimjangSortOptions(LimjangSortOptions sort) { List orders = new ArrayList<>(); switch (sort) {