CRUD API를 개발하기 위해 Book에 대해서 생성, 조회, 수정, 삭제에 대한 기능을 먼저 개발해야합니다. 따라서 BookService가 기존에 고려하지 않았던 Update 와 Delete를 수행할 수 있도록 기능을 확장해야합니다.
BookService 인터페이스에 다음 두 메소드를 추가해주었습니다.
public interface BookService {
...
Long updateBook(Long id, BookUpdateRequestDto bookUpdateRequestDto);
Long deleteBook(Long id);
}
updateBook()
은 id에 해당하는 책의 정보를 bookUpdateRequestDto의 정보로 바꾸어주는 역할을 합니다. deleteBook()
은 id에 해당하는 책을 삭제하는 역할을 합니다.
BookUpdateRequestDto는 다음과 같습니다.
@Data
@Builder
public class BookUpdateRequestDto {
private String name;
private String author;
private int expense;
}
name과 author와 expense를 갖고있으며, 이 정보를 받아 id에 해당하는 책의 정보를 바꿔치기 하게 할 예정입니다.
사실 위와 같은 객체 구조는 BookInsertRequestDto와 동일합니다. 그럼에도 불구하고 BookInsertRequestDto를 재활용하지 않고 BookUpdateRequestDto를 새로 만든 이유는 두 객체의 역할이 다르기 때문입니다. 만약 BookInsertRequestDto에 추가돼야할 attribute가 있는데, BookUpdateRequestDto에는 그 attribute가 추가되지 않아야 한다면 문제가 발생할 것이기 때문입니다.
BookRepository도 수정과 삭제라는 추가적인 설계에 대해 이를 반영한 코드 변화가 필요합니다.