diff --git a/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/controller/MemberController.java b/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/controller/MemberController.java index 5c6798d0..96476a39 100644 --- a/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/controller/MemberController.java +++ b/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/controller/MemberController.java @@ -8,6 +8,8 @@ import com.web.baebaeBE.global.authorization.annotation.AuthorizationMember; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -80,13 +82,13 @@ public ResponseEntity deleteMember( return ResponseEntity.ok().build(); } - @GetMapping("/search/{memberId}") - @AuthorizationMember - public List searchMembers( - @PathVariable Long memberId, + @GetMapping("/search/{nickname}") + public Page searchMembers( + @PathVariable String nickname, + Pageable page, HttpServletRequest httpServletRequest) { - return memberService.searchMembers(memberId); + return memberService.searchMembers(nickname, page); } diff --git a/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/controller/api/MemberApi.java b/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/controller/api/MemberApi.java index e8d2b4f7..9a339083 100644 --- a/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/controller/api/MemberApi.java +++ b/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/controller/api/MemberApi.java @@ -14,6 +14,8 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -211,7 +213,7 @@ ResponseEntity deleteMember(@PathVariable Long memberId, @Operation( summary = "회원 검색", - description = "본인을 제외한 모든 회원을 검색합니다.", + description = "모든 회원을 닉네임을 기반으로 검색합니다.", security = @SecurityRequirement(name = "bearerAuth") ) @Parameter( @@ -225,17 +227,11 @@ ResponseEntity deleteMember(@PathVariable Long memberId, content = @Content(mediaType = "application/json", examples = @ExampleObject(value = "{\n" + " \"errorCode\": \"MM-002\",\n" + - " \"message\": \"회원정보와 토큰정보가 일치하지 않습니다.\"\n" + + " \"message\": \"토큰정보가 일치하지 않습니다.\"\n" + "}")) ), - @ApiResponse(responseCode = "404", description = "존재하지 않는 회원", - content = @Content(mediaType = "application/json", - examples = @ExampleObject(value = "{\n" + - " \"errorCode\": \"M-002\",\n" + - " \"message\": \"존재하지 않는 회원입니다.\"\n" + - "}")) - ) }) - List searchMembers(@PathVariable Long memberId, + Page searchMembers(@PathVariable String nickname, + Pageable page, HttpServletRequest httpServletRequest); } \ No newline at end of file diff --git a/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/repository/MemberRepository.java b/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/repository/MemberRepository.java index f71aa766..209e6fbb 100644 --- a/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/repository/MemberRepository.java +++ b/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/repository/MemberRepository.java @@ -4,6 +4,9 @@ import java.util.List; import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -18,7 +21,9 @@ public interface MemberRepository extends JpaRepository { boolean existsByNickname(String nickname); Optional findByRefreshToken(String refreshToken); - List findAllByIdNot(Long memberId); + + // 닉네임이 포함된 회원 목록 조회 (대소문자 구분 없이 검색) + Page findByNicknameContainingIgnoreCase(String nickname, Pageable pageable); } diff --git a/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/service/MemberService.java b/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/service/MemberService.java index 88e65634..d72282ff 100644 --- a/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/service/MemberService.java +++ b/baebae-BE/src/main/java/com/web/baebaeBE/domain/member/service/MemberService.java @@ -11,6 +11,8 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -96,12 +98,10 @@ public MemberResponse.MemberIdResponse getMemberIdByNickname(String nickname) { - // 본인 제외하고 모든 회원을 조회하는 메서드 - public List searchMembers(Long memberId) { - List members = memberRepository.findAllByIdNot(memberId); - return members.stream() - .map(member -> MemberResponse.MemberSearchInformationResponse.of( - member.getId(), member.getNickname(), member.getProfileImage())) - .collect(Collectors.toList()); + // 모든 회원을 조회하는 메서드 + public Page searchMembers(String nickname, Pageable page) { + return memberRepository.findByNicknameContainingIgnoreCase(nickname, page) + .map(member -> MemberResponse.MemberSearchInformationResponse.of(member.getId(), member.getNickname(), member.getProfileImage())); + } }