📂 apiPayload
📂 config
📂 controller
L UserController
📂 domain
L 📂 common
L 📂 enums
L User
📂 dto
L 📂 request
L 📂 response
📂 jwt
L JwtFilter
L JwtUtil
📂 repository
L UserRepository
📂 service
L UserService
L UserServiceImpl
회원 탈퇴 로직 구현
① UserServiceImpl
@Service
@Transactional
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
public SuccessStatus signOut(String userEmail) {
Optional<User> user = userRepository.findByEmail(userEmail);
if (user.isPresent()) {
userRepository.deleteById(user.get().getId());
return SuccessStatus._OK;
} else {
throw new GeneralException(ErrorStatus.MEMBER_NOT_FOUND);
}
}
}
L 전달받은 이메일이 가입된 사용자인지 확인 → 있으면 객체 삭제 → 없으면 에러 반환
② UserController
@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
@Tag(name = "USER", description = "USER SignUp/Login API")
public class UserController {
private final UserService userService;
@DeleteMapping("/signout")
@Operation(summary = "회원 탈퇴", description = "회원 탈퇴 시 사용하는 API")
@ApiResponses(value = {
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MEMBER4001", description = "사용자가 없습니다", content = @Content(mediaType = "application/json")),
})
public ApiResponse<SuccessStatus> signOut(@RequestHeader("Authorization") String token) {
String jwtToken = token.substring(7);
String userEmail = JwtUtil.getEmail(jwtToken);
return ApiResponse.onSuccess(userService.signOut(userEmail));
}
}
L 현재 로그인 중인 사용자의 jwt 토큰으로 사용자 이메일 추출 → 해당 이메일 가진 사용자 삭제 요청
2024.08.07 - [Spring/[Project] AI 기반 사용자 맞춤형 메뉴와 맛집 추천] - [Springboot] 회원 탈퇴 설계하기
'Spring > [P] AI 기반 사용자 맞춤형 메뉴와 맛집 추천' 카테고리의 다른 글
[Springboot/SpringSecurity/JWT] 로그인 개발하기 (1) build.gradle, config (0) | 2024.08.14 |
---|---|
[Springboot] 로그인 설계하기 (0) | 2024.08.09 |
[Springboot] 회원 탈퇴 설계하기 (0) | 2024.08.07 |
[Springboot] 회원 가입 개발하기 (2) controller, domain, repository, service (0) | 2024.08.06 |
[Springboot] 회원 가입 개발하기 (1) enums, dto (0) | 2024.08.05 |