Repository에 deleteById를 추가해준다.
JpaRepository의 method와 동일한 이름으로 추가해주면 기본 구현을 사용할 수 있다.
interface UserRepository {
fun deleteById(id: Long)
}
@Repository
interface JpaUserRepository: JpaRepository<User, Long>, UserRepository {
}
Optional을 사용해도 되겠지만, 이번에는 Exception을 던져보자
class UserNotFoundException(message: String): RuntimeException(message)
?:
https://kotlinlang.org/docs/null-safety.html#elvis-operator
elvis operator를 쓰면 null인 경우를 단순하게 처리할 수 있다.
@Service
class UserService(private val userRepository: UserRepository) {
fun deleteUserById(userId: Long) {
val user = findUserById(userId = userId) ?: throw UserNotFoundException("User with ID $userId not found")
userRepository.deleteById(user.id)
}
}
@RestController
@RequestMapping("/users")
class UserController(
private val userService: UserService
) {
@DeleteMapping("/{userId}")
fun deleteUser(@PathVariable userId: Long): ResponseEntity<Void> {
return try {
userService.deleteUserById(userId)
ResponseEntity.noContent().build()
} catch (e: UserNotFoundException) {
ResponseEntity.notFound().build()
}
}
}