회원 탈퇴 기능도 정보 수정과 같이 /user URI를 사용하지만 Delete 요청으로 구분

🔍 Controller

@DeleteMapping("/user")
public ResponseEntity<Void> delete(HttpServletRequest request) {
    User user = (User) request.getAttribute("user");
		
    if(user.getAuthority().equals("ROLE_ADMIN")) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
    }

    boolean check_delete = userService.deleteUser(user.getUsername());

    return (check_delete) ?
            ResponseEntity.status(HttpStatus.OK).body(null) :
            ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}

관리자 계정은 실수로 탈퇴되는것을 막기위해 조건 추가

JWT 를 활용하여 요청을 보낸 유저의 권한이 관리자라면 400 status code 반환

UserServicedeleteUser 함수를 호출하고 결과에 따라 200 또는 400의 status code를 반환

🔍 Service

@Override
public boolean deleteUser(String username) {
    userRepository.deleteByUser(username);

    boolean check = checkUsername(username);
    return !check;
}

UserRepositorydeleteByUser 함수 호출

🔍 Repository

@Override
@Transactional
public void deleteByUser(String username) {
    List<Long> productIDList = productRepository.selectIDFromUsername(username)
            .stream().map(selectID -> selectID.getId()).toList();

    productRepository.deleteProductIDList(productIDList);

    deleteUsername(username);
}

해당 User와 연관된 Product들을 delete하고 User를 delete

하지만 여기서의 delete가 일반적으로 생각되는 삭제의 개념은 아니다.

Product delete와 관해선 해당 링크에서 설명