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()); } // 나머지 메서드들은 그대로 유지