// java
public class TodoService {
private final TodoRepository todoRepository;
public TodoService(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
// kotlin
class TodoService(
private val todoRepository: TodoRepository,
)
*findByIdOrNull*
을 사용한다.// java
@Transactional(readOnly = true)
public Todo findById(Long id) {
return todoRepository.findById(id)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
}
// kotlin
@Transactional(readOnly = true)
fun findById(id: Long): Todo =
todoRepository.findByIdOrNull(id) ?: throw ResponseStatusException(HttpStatus.NOT_FOUND)
// java
@Transactional
public Todo update(Long id, TodoRequest request) {
Assert.notNull(request, "TodoRequest is null");
Todo todo = findById(id);
todo.update(request.getTitle(),
request.getDescription(),
request.getDone());
return todoRepository.save(todo);
}
// kotlin
@Transactional
fun update(id: Long, request: TodoRequest?): Todo {
checkNotNull(request) { "TodoRequest is null" }
return findById(id).let { // Todo or Throw => nullable X
it.update(request.title, request.description, request.done)
todoRepository.save(it)
}
}
⇒ model mapper같은 model과 dto을 매핑해주는 라이브러리를 사용할 필요없이 언어에서 기본제공해주는 기능을 쓰게된다.