diff --git a/backend/src/docs/member.adoc b/backend/src/docs/member.adoc index 7908e689..34a47bb4 100644 --- a/backend/src/docs/member.adoc +++ b/backend/src/docs/member.adoc @@ -7,4 +7,5 @@ == Member === 닉네임 중복 검색 operation::get duplicate nickname[snippets='http-request,http-response'] - +=== 닉네임으로 멤버 검색 +operation::get member nickname[snippets='http-request,http-response'] diff --git a/backend/src/main/java/com/twtw/backend/domain/member/controller/MemberController.java b/backend/src/main/java/com/twtw/backend/domain/member/controller/MemberController.java index 26aed994..342bfcaf 100644 --- a/backend/src/main/java/com/twtw/backend/domain/member/controller/MemberController.java +++ b/backend/src/main/java/com/twtw/backend/domain/member/controller/MemberController.java @@ -1,13 +1,11 @@ package com.twtw.backend.domain.member.controller; import com.twtw.backend.domain.member.dto.response.DuplicateNicknameResponse; +import com.twtw.backend.domain.member.dto.response.SearchMemberResponse; import com.twtw.backend.domain.member.service.MemberService; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/member") @@ -22,4 +20,10 @@ public MemberController(MemberService memberService) { public ResponseEntity duplicateNickname(@PathVariable String name) { return ResponseEntity.ok(memberService.duplicateNickname(name)); } + + @GetMapping() + public ResponseEntity searchMemberByNickname( + @RequestParam(name = "nickname") String nickname) { + return ResponseEntity.ok(memberService.getMemberByNickname(nickname)); + } } diff --git a/backend/src/main/java/com/twtw/backend/domain/member/dto/response/SearchMemberResponse.java b/backend/src/main/java/com/twtw/backend/domain/member/dto/response/SearchMemberResponse.java new file mode 100644 index 00000000..74bd0cdd --- /dev/null +++ b/backend/src/main/java/com/twtw/backend/domain/member/dto/response/SearchMemberResponse.java @@ -0,0 +1,13 @@ +package com.twtw.backend.domain.member.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +@AllArgsConstructor +public class SearchMemberResponse { + private Boolean isExist; + private MemberResponse memberResponse; +} diff --git a/backend/src/main/java/com/twtw/backend/domain/member/service/MemberService.java b/backend/src/main/java/com/twtw/backend/domain/member/service/MemberService.java index 9a58f1cb..4cf25e0b 100644 --- a/backend/src/main/java/com/twtw/backend/domain/member/service/MemberService.java +++ b/backend/src/main/java/com/twtw/backend/domain/member/service/MemberService.java @@ -2,6 +2,7 @@ import com.twtw.backend.domain.member.dto.response.DuplicateNicknameResponse; import com.twtw.backend.domain.member.dto.response.MemberResponse; +import com.twtw.backend.domain.member.dto.response.SearchMemberResponse; import com.twtw.backend.domain.member.entity.Member; import com.twtw.backend.domain.member.mapper.MemberMapper; import com.twtw.backend.domain.member.repository.MemberRepository; @@ -39,6 +40,18 @@ public Member getMemberById(UUID id) { return member; } + public SearchMemberResponse getMemberByNickname(String nickname) { + Optional member = memberRepository.findByNickname(nickname); + + if (member.isPresent()) { + Member findMember = member.get(); + + return new SearchMemberResponse(true, memberMapper.toMemberResponse(findMember)); + } + + return new SearchMemberResponse(false, null); + } + public MemberResponse getResponseByMember(Member member) { return memberMapper.toMemberResponse(member); } diff --git a/backend/src/test/java/com/twtw/backend/domain/member/controller/MemberControllerTest.java b/backend/src/test/java/com/twtw/backend/domain/member/controller/MemberControllerTest.java index 924ebc62..11a84786 100644 --- a/backend/src/test/java/com/twtw/backend/domain/member/controller/MemberControllerTest.java +++ b/backend/src/test/java/com/twtw/backend/domain/member/controller/MemberControllerTest.java @@ -12,6 +12,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import com.twtw.backend.domain.member.dto.response.DuplicateNicknameResponse; +import com.twtw.backend.domain.member.dto.response.MemberResponse; +import com.twtw.backend.domain.member.dto.response.SearchMemberResponse; import com.twtw.backend.domain.member.service.MemberService; import com.twtw.backend.support.docs.RestDocsTest; @@ -22,6 +24,8 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; +import java.util.UUID; + @DisplayName("MemberController의") @WebMvcTest(MemberController.class) public class MemberControllerTest extends RestDocsTest { @@ -49,4 +53,37 @@ void duplicate() throws Exception { getDocumentRequest(), getDocumentResponse())); } + + @Test + @DisplayName("Member가 제대로 검색되는가") + void searchMemberByNickname() throws Exception { + // given + String expectedNickname = "JIN_JOO_ONE"; + + final MemberResponse memberResponse = + new MemberResponse(UUID.randomUUID(), expectedNickname); + + final SearchMemberResponse response = new SearchMemberResponse(true, memberResponse); + given(memberService.getMemberByNickname(expectedNickname)).willReturn(response); + + // when + final ResultActions perform = + mockMvc.perform( + get("/member") + .param("nickname", expectedNickname) + .contentType(MediaType.APPLICATION_JSON) + .header( + "Authorization", + "Bearer wefa3fsdczf32.gaoiuergf92.gb5hsa2jgh")); + + // then + perform.andExpect(status().isOk()); + + perform.andDo(print()) + .andDo( + document( + "get member nickname", + getDocumentRequest(), + getDocumentResponse())); + } } diff --git a/backend/src/test/java/com/twtw/backend/domain/member/service/MemberServiceTest.java b/backend/src/test/java/com/twtw/backend/domain/member/service/MemberServiceTest.java index c0e68851..f1396fc5 100644 --- a/backend/src/test/java/com/twtw/backend/domain/member/service/MemberServiceTest.java +++ b/backend/src/test/java/com/twtw/backend/domain/member/service/MemberServiceTest.java @@ -5,6 +5,7 @@ import com.twtw.backend.domain.member.dto.response.DuplicateNicknameResponse; import com.twtw.backend.domain.member.dto.response.MemberResponse; +import com.twtw.backend.domain.member.dto.response.SearchMemberResponse; import com.twtw.backend.domain.member.entity.Member; import com.twtw.backend.domain.member.repository.MemberRepository; import com.twtw.backend.fixture.member.MemberEntityFixture; @@ -55,4 +56,18 @@ void getResponseByMember() { // then assertThat(memberResponse.getId()).isEqualTo(member.getId()); } + + @Test + @DisplayName("Nickname을 통한 Member 검색이 수행되는가") + void searchMemberByNickname() { + // given + final Member member = memberRepository.save(MemberEntityFixture.FIRST_MEMBER.toEntity()); + + // when + final SearchMemberResponse response = + memberService.getMemberByNickname(member.getNickname()); + + // then + assertThat(response.getMemberResponse().getId()).isEqualTo(member.getId()); + } }