From 8fce32b91b7955eeacb75dce5e8771d9cc8a64f3 Mon Sep 17 00:00:00 2001 From: projectmiluju Date: Tue, 16 Sep 2025 04:12:33 +0900 Subject: [PATCH] =?UTF-8?q?refactor(ProfileSearchService):=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84=20=EA=B2=80=EC=83=89=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EC=98=A4=EB=A6=84=EC=B0=A8=EC=88=9C=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=20DP-430?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/repository/UserRepository.java | 3 +-- .../player/service/ProfileSearchService.java | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/goorm/ddok/member/repository/UserRepository.java b/src/main/java/goorm/ddok/member/repository/UserRepository.java index 44605dc1..9ef2a7a9 100644 --- a/src/main/java/goorm/ddok/member/repository/UserRepository.java +++ b/src/main/java/goorm/ddok/member/repository/UserRepository.java @@ -1,6 +1,5 @@ package goorm.ddok.member.repository; -import goorm.ddok.member.domain.UserLocation; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -206,7 +205,7 @@ interface UserOverlayRow { Optional findOverlayById(@Param("id") Long id); @Query(""" - SELECT DISTINCT u FROM User u + SELECT u FROM User u LEFT JOIN FETCH u.location loc LEFT JOIN u.positions pos WHERE ( diff --git a/src/main/java/goorm/ddok/player/service/ProfileSearchService.java b/src/main/java/goorm/ddok/player/service/ProfileSearchService.java index 2c6261c4..e59ac086 100644 --- a/src/main/java/goorm/ddok/player/service/ProfileSearchService.java +++ b/src/main/java/goorm/ddok/player/service/ProfileSearchService.java @@ -15,6 +15,7 @@ import jakarta.persistence.criteria.*; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -25,6 +26,7 @@ import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -46,7 +48,22 @@ public Page searchPlayers(String keyword, int page, int s String searchKeyword = hasText(keyword) ? keyword.trim() : null; Page rows = userRepository.searchPlayersWithKeyword(searchKeyword, pageable); - return rows.map(u -> toResponse(u, currentUserId)); + + List distinctUsers = rows.getContent().stream() + .collect(Collectors.toMap(User::getId, user -> user, (existing, replacement) -> existing)) + .values() + .stream() + .sorted((u1, u2) -> { + int nicknameCompare = u1.getNickname().compareToIgnoreCase(u2.getNickname()); + return nicknameCompare != 0 ? nicknameCompare : u1.getId().compareTo(u2.getId()); + }) + .toList(); + + List responses = distinctUsers.stream() + .map(u -> toResponse(u, currentUserId)) + .toList(); + + return new PageImpl<>(responses, pageable, rows.getTotalElements()); } // 나머지 메서드들은 그대로 유지