33import com .ai .lawyer .domain .member .dto .MemberLoginRequest ;
44import com .ai .lawyer .domain .member .dto .MemberResponse ;
55import com .ai .lawyer .domain .member .dto .MemberSignupRequest ;
6- import com .ai .lawyer .domain .member .entity .Member ;
76import com .ai .lawyer .domain .member .service .MemberService ;
87import io .swagger .v3 .oas .annotations .Operation ;
98import io .swagger .v3 .oas .annotations .responses .ApiResponse ;
@@ -37,14 +36,9 @@ public class MemberController {
3736 public ResponseEntity <MemberResponse > signup (@ Valid @ RequestBody MemberSignupRequest request ) {
3837 log .info ("회원가입 요청: email={}, name={}" , request .getLoginId (), request .getName ());
3938
40- try {
41- MemberResponse response = memberService .signup (request );
42- log .info ("회원가입 성공: memberId={}" , response .getMemberId ());
43- return ResponseEntity .status (HttpStatus .CREATED ).body (response );
44- } catch (IllegalArgumentException e ) {
45- log .warn ("회원가입 실패: {}" , e .getMessage ());
46- return ResponseEntity .badRequest ().build ();
47- }
39+ MemberResponse response = memberService .signup (request );
40+ log .info ("회원가입 성공: memberId={}" , response .getMemberId ());
41+ return ResponseEntity .status (HttpStatus .CREATED ).body (response );
4842 }
4943
5044 @ PostMapping ("/login" )
@@ -57,14 +51,9 @@ public ResponseEntity<MemberResponse> login(@Valid @RequestBody MemberLoginReque
5751 HttpServletResponse response ) {
5852 log .info ("로그인 요청: email={}" , request .getLoginId ());
5953
60- try {
61- MemberResponse memberResponse = memberService .login (request , response );
62- log .info ("로그인 성공: memberId={}" , memberResponse .getMemberId ());
63- return ResponseEntity .ok (memberResponse );
64- } catch (IllegalArgumentException e ) {
65- log .warn ("로그인 실패: {}" , e .getMessage ());
66- return ResponseEntity .status (HttpStatus .UNAUTHORIZED ).build ();
67- }
54+ MemberResponse memberResponse = memberService .login (request , response );
55+ log .info ("로그인 성공: memberId={}" , memberResponse .getMemberId ());
56+ return ResponseEntity .ok (memberResponse );
6857 }
6958
7059 @ PostMapping ("/logout" )
@@ -78,9 +67,9 @@ public ResponseEntity<Void> logout(Authentication authentication, HttpServletRes
7867 if (authentication != null && authentication .getName () != null ) {
7968 String loginId = authentication .getName ();
8069 memberService .logout (loginId , response );
81- log .info ("로그아웃 완료: email ={}" , loginId );
70+ log .info ("로그아웃 완료: memberId ={}" , loginId );
8271 } else {
83- // 인증 정보가 없어도 쿠키는 클리어
72+ // 인증되지 않은 상태에서도 클라이언트 쿠키 클리어 처리
8473 memberService .logout ("" , response );
8574 log .info ("인증 정보 없이 로그아웃 완료" );
8675 }
@@ -98,22 +87,16 @@ public ResponseEntity<MemberResponse> refreshToken(HttpServletRequest request,
9887 HttpServletResponse response ) {
9988 log .info ("토큰 재발급 요청" );
10089
101- // 쿠키에서 리프레시 토큰 추출 (간단한 방법)
90+ // HTTP 쿠키에서 리프레시 토큰 추출
10291 String refreshToken = extractRefreshTokenFromCookies (request );
10392
10493 if (refreshToken == null ) {
105- log .warn ("리프레시 토큰이 없음" );
106- return ResponseEntity .status (HttpStatus .UNAUTHORIZED ).build ();
94+ throw new com .ai .lawyer .domain .member .exception .MemberAuthenticationException ("리프레시 토큰이 없습니다." );
10795 }
10896
109- try {
110- MemberResponse memberResponse = memberService .refreshToken (refreshToken , response );
111- log .info ("토큰 재발급 성공: memberId={}" , memberResponse .getMemberId ());
112- return ResponseEntity .ok (memberResponse );
113- } catch (IllegalArgumentException e ) {
114- log .warn ("토큰 재발급 실패: {}" , e .getMessage ());
115- return ResponseEntity .status (HttpStatus .UNAUTHORIZED ).build ();
116- }
97+ MemberResponse memberResponse = memberService .refreshToken (refreshToken , response );
98+ log .info ("토큰 재발급 성공: memberId={}" , memberResponse .getMemberId ());
99+ return ResponseEntity .ok (memberResponse );
117100 }
118101
119102 @ DeleteMapping ("/withdraw" )
@@ -124,25 +107,18 @@ public ResponseEntity<MemberResponse> refreshToken(HttpServletRequest request,
124107 @ ApiResponse (responseCode = "404" , description = "존재하지 않는 회원" )
125108 })
126109 public ResponseEntity <Void > withdraw (Authentication authentication , HttpServletResponse response ) {
127- if (authentication == null || authentication .getName () == null ) {
128- log .warn ("인증되지 않은 회원탈퇴 요청" );
129- return ResponseEntity .status (HttpStatus .UNAUTHORIZED ).build ();
110+ if (authentication == null || authentication .getPrincipal () == null ) {
111+ throw new com .ai .lawyer .domain .member .exception .MemberAuthenticationException ("인증이 필요합니다." );
130112 }
131113
132- String loginId = authentication .getName ();
133- log .info ("회원탈퇴 요청: email={}" , loginId );
134-
135- try {
136- // loginId로 Member를 조회하여 실제 memberId 사용
137- Member member = memberService .findByLoginId (loginId );
138- memberService .withdraw (member .getMemberId ());
139- memberService .logout (loginId , response ); // 탈퇴 후 로그아웃 처리
140- log .info ("회원탈퇴 성공: email={}, memberId={}" , loginId , member .getMemberId ());
141- return ResponseEntity .ok ().build ();
142- } catch (IllegalArgumentException e ) {
143- log .warn ("회원탈퇴 실패: {}" , e .getMessage ());
144- return ResponseEntity .notFound ().build ();
145- }
114+ Long memberId = (Long ) authentication .getPrincipal ();
115+ String loginId = (String ) authentication .getDetails ();
116+ log .info ("회원탈퇴 요청: memberId={}, email={}" , memberId , loginId );
117+
118+ memberService .withdraw (memberId );
119+ memberService .logout (loginId , response ); // 회원 탈퇴 후 세션 및 토큰 정리
120+ log .info ("회원탈퇴 성공: memberId={}, email={}" , memberId , loginId );
121+ return ResponseEntity .ok ().build ();
146122 }
147123
148124 @ GetMapping ("/me" )
@@ -152,26 +128,23 @@ public ResponseEntity<Void> withdraw(Authentication authentication, HttpServletR
152128 @ ApiResponse (responseCode = "401" , description = "인증되지 않은 사용자" )
153129 })
154130 public ResponseEntity <MemberResponse > getMyInfo (Authentication authentication ) {
155- if (authentication == null || authentication .getName () == null ) {
156- log .warn ("인증되지 않은 정보 조회 요청" );
157- return ResponseEntity .status (HttpStatus .UNAUTHORIZED ).build ();
131+ if (authentication == null || authentication .getPrincipal () == null ) {
132+ throw new com .ai .lawyer .domain .member .exception .MemberAuthenticationException ("인증이 필요합니다." );
158133 }
159134
160- String loginId = authentication .getName ();
161- log .info ("내 정보 조회 요청: email={}" , loginId );
162-
163- try {
164- // loginId로 Member를 조회하여 실제 memberId 사용
165- Member member = memberService .findByLoginId (loginId );
166- MemberResponse response = memberService .getMemberById (member .getMemberId ());
167- log .info ("내 정보 조회 성공: memberId={}" , response .getMemberId ());
168- return ResponseEntity .ok (response );
169- } catch (IllegalArgumentException e ) {
170- log .warn ("내 정보 조회 실패: {}" , e .getMessage ());
171- return ResponseEntity .notFound ().build ();
172- }
135+ Long memberId = (Long ) authentication .getPrincipal ();
136+ log .info ("내 정보 조회 요청: memberId={}" , memberId );
137+
138+ MemberResponse response = memberService .getMemberById (memberId );
139+ log .info ("내 정보 조회 성공: memberId={}" , response .getMemberId ());
140+ return ResponseEntity .ok (response );
173141 }
174142
143+ /**
144+ * HTTP 쿠키에서 리프레시 토큰을 추출합니다.
145+ * @param request HTTP 요청 객체
146+ * @return 리프레시 토큰 값 또는 null
147+ */
175148 private String extractRefreshTokenFromCookies (HttpServletRequest request ) {
176149 if (request .getCookies () != null ) {
177150 for (jakarta .servlet .http .Cookie cookie : request .getCookies ()) {
0 commit comments