From 7b3e450dbe6315fd4cbc2d3f5ea016cd75926aed Mon Sep 17 00:00:00 2001 From: Suhun0331 Date: Tue, 12 Aug 2025 21:44:58 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Refactor=20:=20=EC=9E=90=EC=86=8C=EC=84=9C?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=20=EC=8B=9C=20=EC=B5=9C=EA=B7=BC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EC=9D=BC=EC=9E=90=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/response/FindIntroduceResponse.java | 11 ++++++++--- .../response/FindMasterIntroduceResponse.java | 7 ++++++- .../controller/response/SearchResultResponse.java | 3 ++- .../introduce/service/IntroduceServiceImpl.java | 10 +++++----- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/main/java/umc/kkijuk/server/introduce/controller/response/FindIntroduceResponse.java b/src/main/java/umc/kkijuk/server/introduce/controller/response/FindIntroduceResponse.java index 85a159b..8846e26 100644 --- a/src/main/java/umc/kkijuk/server/introduce/controller/response/FindIntroduceResponse.java +++ b/src/main/java/umc/kkijuk/server/introduce/controller/response/FindIntroduceResponse.java @@ -16,10 +16,15 @@ public class FindIntroduceResponse implements SearchResultResponse { private Long introId; private String title; private String content; - private LocalDate createdDate; + private LocalDate updatedDate; + +// @Override +// public LocalDate getCreatedDate() { +// return createdDate; +// } @Override - public LocalDate getCreatedDate() { - return createdDate; + public LocalDate getUpdatedDate() { + return updatedDate; } } diff --git a/src/main/java/umc/kkijuk/server/introduce/controller/response/FindMasterIntroduceResponse.java b/src/main/java/umc/kkijuk/server/introduce/controller/response/FindMasterIntroduceResponse.java index dcf377a..73c2ec4 100644 --- a/src/main/java/umc/kkijuk/server/introduce/controller/response/FindMasterIntroduceResponse.java +++ b/src/main/java/umc/kkijuk/server/introduce/controller/response/FindMasterIntroduceResponse.java @@ -18,8 +18,13 @@ public class FindMasterIntroduceResponse implements SearchResultResponse { private String content; private LocalDate createdDate; +// @Override +// public LocalDate getCreatedDate() { +// return createdDate; +// } + @Override - public LocalDate getCreatedDate() { + public LocalDate getUpdatedDate() { return createdDate; } } diff --git a/src/main/java/umc/kkijuk/server/introduce/controller/response/SearchResultResponse.java b/src/main/java/umc/kkijuk/server/introduce/controller/response/SearchResultResponse.java index 7e8d7d7..1ef05e4 100644 --- a/src/main/java/umc/kkijuk/server/introduce/controller/response/SearchResultResponse.java +++ b/src/main/java/umc/kkijuk/server/introduce/controller/response/SearchResultResponse.java @@ -3,5 +3,6 @@ import java.time.LocalDate; public interface SearchResultResponse { - LocalDate getCreatedDate(); +// LocalDate getCreatedDate(); + LocalDate getUpdatedDate(); } diff --git a/src/main/java/umc/kkijuk/server/introduce/service/IntroduceServiceImpl.java b/src/main/java/umc/kkijuk/server/introduce/service/IntroduceServiceImpl.java index b488f25..ba2c961 100644 --- a/src/main/java/umc/kkijuk/server/introduce/service/IntroduceServiceImpl.java +++ b/src/main/java/umc/kkijuk/server/introduce/service/IntroduceServiceImpl.java @@ -273,12 +273,12 @@ public Map searchIntroduceAndMasterByKeyword(String keyword, Mem List introduceList = introduceRepository.searchIntroduceByKeywordForMember(keyword, requestMember.getId()) .stream() .flatMap(introduce -> introduce.getQuestions().stream() - .filter(q -> q.getContent().contains(keyword)) // ✨ filter 먼저 적용 + .filter(q -> q.getContent().contains(keyword)) // filter 먼저 적용 .map(q -> FindIntroduceResponse.builder() .introId(introduce.getId()) .title(introduce.getRecruit().getTitle()) .content(q.getContent()) - .createdDate(introduce.getCreatedAt().toLocalDate()) + .updatedDate(introduce.getUpdatedAt().toLocalDate()) .build())) .collect(Collectors.toList()); @@ -286,12 +286,12 @@ public Map searchIntroduceAndMasterByKeyword(String keyword, Mem List masterIntroduceList = masterIntroduceRepository.searchMasterIntroduceByKeywordForMember(keyword, requestMember.getId()) .stream() .flatMap(masterIntroduce -> masterIntroduce.getMasterQuestion().stream() - .filter(mq -> mq.getContent().contains(keyword)) // ✨ filter 먼저 적용 + .filter(mq -> mq.getContent().contains(keyword)) // filter 먼저 적용 .map(mq -> FindMasterIntroduceResponse.builder() .masterIntroId(masterIntroduce.getId()) .title("Master") .content(mq.getContent()) - .createdDate(masterIntroduce.getCreatedAt().toLocalDate()) + .createdDate(masterIntroduce.getUpdatedAt().toLocalDate()) .build())) .collect(Collectors.toList()); @@ -300,7 +300,7 @@ public Map searchIntroduceAndMasterByKeyword(String keyword, Mem result.addAll(masterIntroduceList); result.addAll(introduceList); - result.sort(Comparator.comparing(SearchResultResponse::getCreatedDate).reversed()); // 최신순 정렬 + result.sort(Comparator.comparing(SearchResultResponse::getUpdatedDate).reversed()); // 최신순 정렬 // 응답 반환 Map response = new LinkedHashMap<>(); From 757c01c14701a94b3dfc252a131883a544de1744 Mon Sep 17 00:00:00 2001 From: Suhun0331 Date: Tue, 12 Aug 2025 22:07:20 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Refactor=20:=20=EC=9E=90=EC=86=8C=EC=84=9C?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=20=EC=8B=9C=20=EC=98=81=EC=96=B4=20?= =?UTF-8?q?=EB=8C=80=EC=86=8C=EB=AC=B8=EC=9E=90=20=EA=B5=AC=EB=B6=84=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../response/FindMasterIntroduceResponse.java | 6 +- .../repository/IntroduceRepository.java | 8 ++- .../repository/MasterIntroduceRepository.java | 8 ++- .../service/IntroduceServiceImpl.java | 56 +++++++++---------- 4 files changed, 44 insertions(+), 34 deletions(-) diff --git a/src/main/java/umc/kkijuk/server/introduce/controller/response/FindMasterIntroduceResponse.java b/src/main/java/umc/kkijuk/server/introduce/controller/response/FindMasterIntroduceResponse.java index 73c2ec4..d67813a 100644 --- a/src/main/java/umc/kkijuk/server/introduce/controller/response/FindMasterIntroduceResponse.java +++ b/src/main/java/umc/kkijuk/server/introduce/controller/response/FindMasterIntroduceResponse.java @@ -16,7 +16,7 @@ public class FindMasterIntroduceResponse implements SearchResultResponse { private Long masterIntroId; private String title; private String content; - private LocalDate createdDate; + private LocalDate updatedDate; // @Override // public LocalDate getCreatedDate() { @@ -25,6 +25,8 @@ public class FindMasterIntroduceResponse implements SearchResultResponse { @Override public LocalDate getUpdatedDate() { - return createdDate; + return updatedDate; } + + } diff --git a/src/main/java/umc/kkijuk/server/introduce/repository/IntroduceRepository.java b/src/main/java/umc/kkijuk/server/introduce/repository/IntroduceRepository.java index 8248c71..ba786cd 100644 --- a/src/main/java/umc/kkijuk/server/introduce/repository/IntroduceRepository.java +++ b/src/main/java/umc/kkijuk/server/introduce/repository/IntroduceRepository.java @@ -19,7 +19,13 @@ public interface IntroduceRepository extends JpaRepository { Page findActiveIntroduces(@Param("memberId") Long memberId, @Param("state") int state, Pageable pageable); - @Query("SELECT i FROM Introduce i JOIN FETCH i.questions q WHERE i.memberId = :memberId AND q.content LIKE %:keyword%") + @Query(""" + SELECT DISTINCT i + FROM Introduce i + JOIN FETCH i.questions q + WHERE i.memberId = :memberId + AND LOWER(CAST(q.content AS string)) LIKE CONCAT('%', LOWER(:keyword), '%') + """) List searchIntroduceByKeywordForMember(@Param("keyword") String keyword, @Param("memberId") Long memberId); diff --git a/src/main/java/umc/kkijuk/server/introduce/repository/MasterIntroduceRepository.java b/src/main/java/umc/kkijuk/server/introduce/repository/MasterIntroduceRepository.java index cb4ccff..7eaf030 100644 --- a/src/main/java/umc/kkijuk/server/introduce/repository/MasterIntroduceRepository.java +++ b/src/main/java/umc/kkijuk/server/introduce/repository/MasterIntroduceRepository.java @@ -12,7 +12,13 @@ public interface MasterIntroduceRepository extends JpaRepository { Optional findByMemberId(Long memberId); - @Query("SELECT DISTINCT m FROM MasterIntroduce m JOIN FETCH m.masterQuestion q WHERE m.memberId = :memberId AND q.content LIKE %:keyword%") + @Query(""" + SELECT DISTINCT m + FROM MasterIntroduce m + JOIN FETCH m.masterQuestion q + WHERE m.memberId = :memberId + AND LOWER(CAST(q.content AS string)) LIKE CONCAT('%', LOWER(:keyword), '%') + """) List searchMasterIntroduceByKeywordForMember(@Param("keyword") String keyword, @Param("memberId") Long memberId); } diff --git a/src/main/java/umc/kkijuk/server/introduce/service/IntroduceServiceImpl.java b/src/main/java/umc/kkijuk/server/introduce/service/IntroduceServiceImpl.java index ba2c961..d6d9945 100644 --- a/src/main/java/umc/kkijuk/server/introduce/service/IntroduceServiceImpl.java +++ b/src/main/java/umc/kkijuk/server/introduce/service/IntroduceServiceImpl.java @@ -269,48 +269,44 @@ public Long deleteIntro(Member requestMember, Long introId, Long recruitId) { @Override public Map searchIntroduceAndMasterByKeyword(String keyword, Member requestMember) { - // Introduce 검색 - List introduceList = introduceRepository.searchIntroduceByKeywordForMember(keyword, requestMember.getId()) - .stream() - .flatMap(introduce -> introduce.getQuestions().stream() - .filter(q -> q.getContent().contains(keyword)) // filter 먼저 적용 - .map(q -> FindIntroduceResponse.builder() - .introId(introduce.getId()) - .title(introduce.getRecruit().getTitle()) - .content(q.getContent()) - .updatedDate(introduce.getUpdatedAt().toLocalDate()) - .build())) - .collect(Collectors.toList()); - // MasterIntroduce 검색 - List masterIntroduceList = masterIntroduceRepository.searchMasterIntroduceByKeywordForMember(keyword, requestMember.getId()) - .stream() - .flatMap(masterIntroduce -> masterIntroduce.getMasterQuestion().stream() - .filter(mq -> mq.getContent().contains(keyword)) // filter 먼저 적용 - .map(mq -> FindMasterIntroduceResponse.builder() - .masterIntroId(masterIntroduce.getId()) - .title("Master") - .content(mq.getContent()) - .createdDate(masterIntroduce.getUpdatedAt().toLocalDate()) - .build())) - .collect(Collectors.toList()); - - // 공통 결과로 합치기 + 정렬 (최신순) + List introduceList = + introduceRepository.searchIntroduceByKeywordForMember(keyword, requestMember.getId()) + .stream() + .flatMap(introduce -> introduce.getQuestions().stream() + .map(q -> FindIntroduceResponse.builder() + .introId(introduce.getId()) + .title(introduce.getRecruit().getTitle()) + .content(q.getContent()) + .updatedDate(introduce.getUpdatedAt().toLocalDate()) + .build())) + .collect(Collectors.toList()); + + List masterIntroduceList = + masterIntroduceRepository.searchMasterIntroduceByKeywordForMember(keyword, requestMember.getId()) + .stream() + .flatMap(masterIntroduce -> masterIntroduce.getMasterQuestion().stream() + .map(mq -> FindMasterIntroduceResponse.builder() + .masterIntroId(masterIntroduce.getId()) + .title("Master") + .content(mq.getContent()) + .updatedDate(masterIntroduce.getUpdatedAt().toLocalDate()) + .build())) + .collect(Collectors.toList()); + + // 합치기 + 최신순 정렬 List result = new ArrayList<>(); result.addAll(masterIntroduceList); result.addAll(introduceList); - result.sort(Comparator.comparing(SearchResultResponse::getUpdatedDate).reversed()); // 최신순 정렬 + result.sort(Comparator.comparing(SearchResultResponse::getUpdatedDate).reversed()); - // 응답 반환 Map response = new LinkedHashMap<>(); response.put("count", result.size()); response.put("data", result); - return response; } - @Override @Transactional public Introduce findByRecruitId(Long recruitId) {