@Override
  @Transactional(propagation = Propagation.REQUIRED)
  public List<BookEntity> getBooks(int offset, int limit, BookStatusesEnum status)
      throws NoSuchEntityException, NotSupportedFieldException, ForbiddenException,
          AuthRequiredException {
    bookAvailabilityService.areBooksWithStatusAvailable(status);
    List<BookEntity> books = bookDao.getBooksWithStatuses(offset, limit, status);

    if (CollectionUtils.isEmpty(books)) {
      throw new NoSuchEntityException(
          BookEntity.class.getName(),
          String.format("offset %d, limit %d, status %s", offset, limit, status));
    }
    return books;
  }