회원 탈퇴 기능도 정보 수정과 같이 /user URI를 사용하지만 Delete 요청으로 구분
@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 반환
UserService 의 deleteUser 함수를 호출하고 결과에 따라 200 또는 400의 status code를 반환
@Override
public boolean deleteUser(String username) {
userRepository.deleteByUser(username);
boolean check = checkUsername(username);
return !check;
}
UserRepository 의 deleteByUser 함수 호출
@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와 관해선 해당 링크에서 설명