Skip to content

Commit cea611d

Browse files
authored
[Feat] 회원 정보 조회 API 구현
2 parents a482f66 + 82ebee6 commit cea611d

File tree

6 files changed

+122
-1
lines changed

6 files changed

+122
-1
lines changed

src/main/java/eatda/controller/member/MemberController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ public class MemberController {
1717

1818
private final MemberService memberService;
1919

20+
@GetMapping("/api/member")
21+
public ResponseEntity<MemberResponse> getMember(LoginMember member) {
22+
MemberResponse response = memberService.getMember(member.id());
23+
return ResponseEntity.ok(response);
24+
}
25+
2026
@GetMapping("/api/member/nickname/check")
2127
public ResponseEntity<Void> checkNickname(LoginMember member, @RequestParam String nickname) {
2228
memberService.validateNickname(nickname, member.id());

src/main/java/eatda/service/member/MemberService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ public class MemberService {
1616

1717
private final MemberRepository memberRepository;
1818

19+
@Transactional(readOnly = true)
20+
public MemberResponse getMember(long memberId) {
21+
Member member = memberRepository.getById(memberId);
22+
return new MemberResponse(member);
23+
}
24+
1925
@Transactional(readOnly = true)
2026
public void validateNickname(String nickname, long memberId) {
2127
Member member = memberRepository.getById(memberId);

src/test/java/eatda/controller/BaseControllerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class BaseControllerTest {
4646
protected MemberRepository memberRepository;
4747

4848
@Autowired
49-
private JwtManager jwtManager;
49+
protected JwtManager jwtManager;
5050

5151
@MockitoBean
5252
private OauthClient oauthClient;

src/test/java/eatda/controller/member/MemberControllerTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,38 @@
44
import static org.junit.jupiter.api.Assertions.assertAll;
55

66
import eatda.controller.BaseControllerTest;
7+
import eatda.domain.member.Member;
78
import io.restassured.http.ContentType;
89
import org.junit.jupiter.api.Nested;
910
import org.junit.jupiter.api.Test;
1011
import org.springframework.http.HttpHeaders;
1112

1213
class MemberControllerTest extends BaseControllerTest {
1314

15+
@Nested
16+
class GetMember {
17+
18+
@Test
19+
void 회원_정보를_조회할_수_있다() {
20+
Member member = memberGenerator.generateRegisteredMember("123", "test-nickname", "01012345678");
21+
String accessToken = jwtManager.issueAccessToken(member.getId());
22+
23+
MemberResponse response = given()
24+
.header(HttpHeaders.AUTHORIZATION, accessToken)
25+
.when().get("/api/member")
26+
.then()
27+
.statusCode(200)
28+
.extract().as(MemberResponse.class);
29+
30+
assertAll(
31+
() -> assertThat(response.id()).isEqualTo(member.getId()),
32+
() -> assertThat(response.nickname()).isEqualTo(member.getNickname()),
33+
() -> assertThat(response.phoneNumber()).isEqualTo(member.getPhoneNumber()),
34+
() -> assertThat(response.isSignUp()).isFalse()
35+
);
36+
}
37+
}
38+
1439
@Nested
1540
class CheckNickname {
1641

src/test/java/eatda/document/member/MemberDocumentTest.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,61 @@
3030

3131
public class MemberDocumentTest extends BaseDocumentTest {
3232

33+
@Nested
34+
class GetMember {
35+
36+
RestDocsRequest requestDocument = request()
37+
.tag(Tag.MEMBER_API)
38+
.summary("회원 정보 조회")
39+
.requestHeader(
40+
headerWithName(HttpHeaders.AUTHORIZATION).description("액세스 토큰")
41+
);
42+
43+
RestDocsResponse responseDocument = response()
44+
.responseBodyField(
45+
fieldWithPath("id").type(NUMBER).description("회원 식별자"),
46+
fieldWithPath("isSignUp").type(BOOLEAN).description("회원 가입 요청 여부 (false 고정)"),
47+
fieldWithPath("nickname").type(STRING).description("회원 닉네임").optional(),
48+
fieldWithPath("phoneNumber").type(STRING).description("회원 전화번호 ex) 01012345678").optional(),
49+
fieldWithPath("optInMarketing").type(BOOLEAN).description("마케팅 동의 여부").optional()
50+
);
51+
52+
@Test
53+
void 회원_정보_조회_성공() {
54+
MemberResponse response = new MemberResponse(1L, false, "test-nickname", "01012345678", true);
55+
doReturn(response).when(memberService).getMember(anyLong());
56+
57+
var document = document("member/get", 200)
58+
.request(requestDocument)
59+
.response(responseDocument)
60+
.build();
61+
62+
given(document)
63+
.contentType(ContentType.JSON)
64+
.header(HttpHeaders.AUTHORIZATION, accessToken())
65+
.when().get("/api/member")
66+
.then().statusCode(200);
67+
}
68+
69+
@EnumSource(value = BusinessErrorCode.class,
70+
names = {"UNAUTHORIZED_MEMBER", "EXPIRED_TOKEN", "INVALID_MEMBER_ID"})
71+
@ParameterizedTest
72+
void 회원_정보_조회_실패(BusinessErrorCode errorCode) {
73+
doThrow(new BusinessException(errorCode)).when(memberService).getMember(anyLong());
74+
75+
var document = document("member/get", errorCode)
76+
.request(requestDocument)
77+
.response(ERROR_RESPONSE)
78+
.build();
79+
80+
given(document)
81+
.contentType(ContentType.JSON)
82+
.header(HttpHeaders.AUTHORIZATION, accessToken())
83+
.when().get("/api/member")
84+
.then().statusCode(errorCode.getStatus().value());
85+
}
86+
}
87+
3388
@Nested
3489
class CheckNickname {
3590

src/test/java/eatda/service/member/MemberServiceTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,35 @@ class MemberServiceTest extends BaseServiceTest {
2020
@Autowired
2121
private MemberService memberService;
2222

23+
@Nested
24+
class GetMember {
25+
26+
@Test
27+
void 회원_정보를_조회할_수_있다() {
28+
Member member = memberGenerator.generateRegisteredMember("123", "nickname", "01012345678");
29+
30+
MemberResponse response = memberService.getMember(member.getId());
31+
32+
assertAll(
33+
() -> assertThat(response.id()).isEqualTo(member.getId()),
34+
() -> assertThat(response.nickname()).isEqualTo(member.getNickname()),
35+
() -> assertThat(response.phoneNumber()).isEqualTo(member.getPhoneNumber()),
36+
() -> assertThat(response.optInMarketing()).isEqualTo(member.isOptInMarketing()),
37+
() -> assertThat(response.isSignUp()).isFalse()
38+
);
39+
}
40+
41+
@Test
42+
void 존재하지_않는_회원의_정보를_조회하면_예외가_발생한다() {
43+
long nonExistentMemberId = 999L;
44+
45+
BusinessException exception = assertThrows(BusinessException.class,
46+
() -> memberService.getMember(nonExistentMemberId));
47+
48+
assertThat(exception.getErrorCode()).isEqualTo(BusinessErrorCode.INVALID_MEMBER_ID);
49+
}
50+
}
51+
2352
@Nested
2453
class ValidateNickname {
2554

0 commit comments

Comments
 (0)