SWM-99-degree / jariBean

SWM 14th JariBean Project
0 stars 1 forks source link

[REFACTOR] 회원 탈퇴를 위한 Controller 수정 #243

Closed isayaksh closed 1 year ago

isayaksh commented 1 year ago

✏️ Description

기존 회원 탈퇴를 위한 Controller의 구성은 다음과 같다.

OAuthController의 withdraw 메서드

@DeleteMapping("/accounts/{registration}")
public ResponseEntity withdraw(@AuthenticationPrincipal LoginUser loginUser,
                               @Valid @RequestBody LoginCode loginCode,
                               @PathVariable String registration) {
    oAuthService = authServiceFactory.get(registration);
    oAuthService.deleteUser(loginUser.getUser().getId(), loginCode.getCode());
    return new ResponseEntity<>(new ResponseDto<>(1, "계정 탈퇴 성공", null), OK);
}

해당 controller에서 불필요한 로직을 수정한다.

🛠 Features

1. 불필요한 Path Variable 제거하기

회원 탈퇴를 위해 클라이언트에서 접근하는 URI는 {{server}}/accounts/{registration} 이다. 해당 API에 접근할 때 반드시 header에 JWT를 첨부해야하고 해당 JWT를 통해서 {registration}를 확인할 수 있다. 따라서 {registration}에 해당하는 Path Variable을 제거한다.

2. 필수가 아닌 Request Body

회원 탈퇴 로직의 경우 Apple을 제외한 다른 소셜 미디어에서는 code 값을 필요로 하지 않는다. 따라서 @RequestBody LoginCode loginCode에 해당하는 값을 nullable 하게 처리하도록 코드를 수정한다.

🔥 After Modification

OAuthController withdraw 메서드

@DeleteMapping("/accounts")
public ResponseEntity withdraw(@AuthenticationPrincipal LoginUser loginUser,
                               @Valid @RequestBody(required = false) LoginCode loginCode) {
    // find user information and extract registration
    String registration = userService.findUserInfo(loginUser.getUser().getId()).getSocialId();

    // allocate implemented oauth service
    oAuthService = authServiceFactory.get(registration);

    // delete user information
    oAuthService.deleteUser(loginUser.getUser().getId(), (loginCode != null) ? loginCode.getCode() : null);

    return new ResponseEntity<>(new ResponseDto<>(1, "계정 탈퇴 성공", null), OK);
}
  1. @RequestBodyrequired 속성을 이용하여 nullable하게 요청을 처리하도록 수정
  2. JWT를 통해 현재 요청을 보낸 회원 정보를 조회하여 registration 추출, PathVariable의 registration 제거