use of com.tvd12.ezydata.example.jpa.entity.Category in project java-examples by tvd12.
the class BookController method getBook.
@GetMapping("/books/{bookId}")
public BookResponse getBook(@PathVariable Long bookId) {
Book book = bookRepository.findById(bookId).orElseThrow(() -> new HttpNotFoundException("not found book with id: " + bookId));
Author author = authorRepository.findById(book.getAuthorId()).orElseThrow(() -> new IllegalStateException("maybe someone has change redis"));
Category category = categoryRepository.findById(book.getCategoryId()).orElseThrow(() -> new IllegalStateException("maybe someone has change redis"));
return entityToResponseConverter.toBookResponse(book, author, category);
}
use of com.tvd12.ezydata.example.jpa.entity.Category in project ezyfox-examples by tvd12.
the class BookService method addBook.
public BookData addBook(AddBookData data) {
Book existedBook = bookRepository.findByNameAndAuthorId(data.getBookName(), data.getAuthorId());
if (existedBook != null) {
throw new DuplicatedBookException("author: " + data.getAuthorId() + " has already registered book: " + data.getBookName());
}
final Author author = authorRepository.findById(data.getAuthorId());
if (author == null) {
throw new InvalidAuthorIdException("author: " + data.getAuthorId() + " not found");
}
final Category category = categoryRepository.findById(data.getCategoryId());
if (category == null) {
throw new InvalidCategoryIdException("category: " + data.getCategoryId() + " not found");
}
final Book book = dataToEntityConverter.toEntity(data);
bookRepository.save(book);
return entityToDataConverter.toData(book, author, category);
}
use of com.tvd12.ezydata.example.jpa.entity.Category in project ezyfox-examples by tvd12.
the class BookServiceTest method addBookSuccess.
@Test
public void addBookSuccess() {
// given
final AddBookData addBookData = randomAddBookData();
when(bookRepository.findByNameAndAuthorId(addBookData.getBookName(), addBookData.getAuthorId())).thenReturn(null);
final Author author = new Author(RandomUtil.randomLong(), RandomUtil.randomShortAlphabetString());
when(authorRepository.findById(addBookData.getAuthorId())).thenReturn(author);
final Category category = new Category(RandomUtil.randomLong(), RandomUtil.randomShortAlphabetString());
when(categoryRepository.findById(addBookData.getCategoryId())).thenReturn(category);
final Book book = new Book(0L, addBookData.getCategoryId(), addBookData.getAuthorId(), addBookData.getBookName(), addBookData.getPrice(), addBookData.getReleaseDate(), addBookData.getReleaseTime(), LocalDateTime.now(), LocalDateTime.now());
when(dataToEntityConverter.toEntity(addBookData)).thenReturn(book);
doAnswer(it -> {
Book inputBook = (Book) it.getArguments()[0];
inputBook.setId(RandomUtil.randomLong());
return null;
}).when(bookRepository).save(book);
BookData bookData = BookData.builder().id(book.getId()).name(book.getName()).author(AuthorData.builder().id(author.getId()).name(author.getName()).build()).category(CategoryData.builder().id(category.getId()).name(category.getName()).build()).price(addBookData.getPrice()).releaseDate(addBookData.getReleaseDate()).releaseTime(addBookData.getReleaseTime()).build();
when(entityToDataConverter.toData(book, author, category)).thenReturn(bookData);
// when
BookData actual = sut.addBook(addBookData);
// then
assertThat(actual).isEqualsTo(bookData);
verify(bookRepository, times(1)).findByNameAndAuthorId(addBookData.getBookName(), addBookData.getAuthorId());
verify(authorRepository, times(1)).findById(addBookData.getAuthorId());
verify(categoryRepository, times(1)).findById(addBookData.getCategoryId());
verify(bookRepository, times(1)).save(book);
verify(dataToEntityConverter, times(1)).toEntity(addBookData);
verify(entityToDataConverter, times(1)).toData(book, author, category);
validateMockitoUsage();
}
use of com.tvd12.ezydata.example.jpa.entity.Category in project ezyfox-examples by tvd12.
the class DataToEntityConverter method toEntity.
public Category toEntity(AddCategoryData data) {
final Category entity = new Category();
entity.setName(data.getCategoryName());
entity.setCreatedTime(LocalDateTime.now());
entity.setUpdatedTime(LocalDateTime.now());
return entity;
}
Aggregations