Skip to content

Commit ee2c2db

Browse files
committed
[REFACTOR] 리프레시 토큰 발급, 계정 탈퇴 API 추가
1 parent ba2e79c commit ee2c2db

6 files changed

Lines changed: 32 additions & 4 deletions

File tree

src/main/java/fitfit/domain/member/controller/MemberRestController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,17 @@ public ApiResponse<String> checkNickname(@Valid @RequestBody MemberRequestDTO.Ni
9393
memberCommandService.checkNickname(request.getNickname());
9494
return ApiResponse.onSuccess("사용 가능한 닉네임입니다.");
9595
}
96+
97+
@DeleteMapping("/withdraw")
98+
@Operation(summary = "회원 탈퇴 API", description = "회원 탈퇴 API입니다.")
99+
@ApiResponses({
100+
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "OK, 성공"),
101+
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "401", description = "인증이 필요합니다.", content = @Content(schema = @Schema(implementation = ApiResponse.class))),
102+
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "존재하지 않는 회원입니다.", content = @Content(schema = @Schema(implementation = ApiResponse.class)))
103+
})
104+
public ApiResponse<String> withdrawMember(@RequestHeader("Authorization") String authorization) {
105+
memberCommandService.withdrawMember(authorization);
106+
return ApiResponse.onSuccess("회원 탈퇴가 성공적으로 처리되었습니다.");
107+
}
96108
}
97109

src/main/java/fitfit/domain/member/service/MemberCommandService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ public interface MemberCommandService {
1010
Member findOrCreateMember(MemberDataDTO.MemberData memberData, Provider provider);
1111
MemberResponseDTO.TermAgreementResponse termAgreement(String authorization, MemberRequestDTO.TermAgreementRequest request);
1212
MemberResponseDTO.MemberSignupResponse memberSignup(String authorization, MemberRequestDTO.MemberSignupRequest request);
13-
1413
void checkNickname(String nickname);
14+
void withdrawMember(String authorization);
1515
}

src/main/java/fitfit/domain/member/service/MemberCommandServiceImpl.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,4 +221,20 @@ private void updateMemberInfo(Member member, MemberRequestDTO.MemberSignupReques
221221

222222
}
223223

224+
@Override
225+
@Transactional
226+
public void withdrawMember(String authorization) {
227+
// JWT 토큰 검증 및 멤버 ID 추출
228+
Long memberId = jwtProvider.getMemberIdAndValidateToken(authorization);
229+
230+
// 회원 조회
231+
Member findMember = memberRepository.findById(memberId)
232+
.orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND));
233+
234+
// 회원 상태 INACTIVE로 변경
235+
findMember.updateStatus(MemberStatus.INACTIVE);
236+
237+
// 리프레시 토큰 삭제
238+
memberTokenRepository.deleteByMember(findMember);
239+
}
224240
}

src/main/java/fitfit/domain/token/controller/MemberTokenRestController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
@RestController
1717
@RequiredArgsConstructor
18-
@RequestMapping("/v1/plantory")
18+
@RequestMapping("/v1/")
1919
@Tag(name = "Token", description = "토큰 관련 API")
2020
public class MemberTokenRestController {
2121
private final MemberTokenCommandUseCase memberTokenCommandUseCase;

src/main/java/fitfit/domain/token/filter/JwtAuthenticationFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
2929
"/v3/api-docs/**",
3030
"/swagger-resources/**",
3131
"/api/members/auth/kko",
32-
"/api/members/auth/refresh",
32+
"/v1/auth/refresh",
3333
"/api/members/nickname/check"
3434
);
3535

src/main/java/fitfit/global/security/config/SecurityConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public SecurityFilterChain filterChain (HttpSecurity http) throws Exception {
4141
"/v3/api-docs/**",
4242
"/swagger-resources/**",
4343
"/api/members/auth/kko",
44-
"/api/members/auth/refresh",
44+
"/v1/auth/refresh",
4545
"/api/members/nickname/check"
4646
).permitAll()
4747
.anyRequest().authenticated()

0 commit comments

Comments
 (0)