/**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     $repo = App::make(Books\BookRepository::class);
     $faker = App::make(Faker\Generator::class);
     foreach ($this->isbns as $isbn) {
         $sellersId = MemberId::generate();
         $bookId = Books\BookId::generate();
         $book = Books\Book::offer($bookId, $sellersId, $isbn, 1500);
         $repo->save($book);
     }
 }
 /**
  * @test
  */
 public function a_book_cannot_be_sold_twice()
 {
     $bookId = BookId::generate();
     $memberId = MemberId::generate();
     $buyersId1 = MemberId::generate();
     $buyersId2 = MemberId::generate();
     $book = Book::offer($bookId, $memberId, "0534408133", 1500);
     //15 euro
     $book->sellToMember($buyersId1);
     $this->expectException(\Exception::class);
     $this->expectExceptionMessage("A book cannot be sold twice");
     $book->sellToMember($buyersId2);
 }
 public function store(Request $req, BookRepository $repo)
 {
     $isbn = new \Isbn\Isbn();
     ///@todo validation
     if (!$isbn->check->identify($req->input('isbn'))) {
         throw new \Exception('Not an ISBN');
     }
     $isbn_10 = $isbn->hyphens->removeHyphens($req->input('isbn'));
     if ($isbn->check->identify($isbn_10) == 13) {
         $isbn_10 = $isbn->translate->to10($isbn_10);
     }
     $book = Book::offer(BookId::generate(), MemberId::generate(), $isbn_10, $req->input('price') * 100);
     $repo->save($book);
     return redirect('/books');
 }
 public static function offer(BookId $id, MemberId $sellersId, string $isbn, int $price) : Book
 {
     $book = new Book();
     $book->apply(new BookOffered($id, $sellersId, $isbn, $price));
     return $book;
 }