Skip to content

Instantly share code, notes, and snippets.

@mathiasverraes
Forked from stivni/Basket.php
Created August 11, 2014 12:12
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save mathiasverraes/7bd0e33eddd36c791a8b to your computer and use it in GitHub Desktop.
<?php
final class Basket implements RecordsEvents
{
private $basketCanOnlyContainFiveProducts;
private function __construct()
{
$this->basketCanOnlyContainFiveProducts = new BasketCanOnlyContainFiveProducts();
}
private function whenBasketWasPickedUp(BasketWasPickedUp $event)
{
$this->basketCanOnlyContainFiveProducts->basketWasPickedUp();
}
private function whenProductWasAddedToBasket(ProductWasAddedToBasket $event)
{
$this->basketCanOnlyContainFiveProducts->productWasAddedToBasket();
}
private function whenProductWasRemovedFromBasket(ProductWasRemovedFromBasket $event)
{
$this->basketCanOnlyContainFiveProducts->productWasRemovedFromBasket();
}
public static function pickUp(BasketId $basketId)
{
$basket = new Basket($basketId);
$basket->recordThat(new BasketWasPickedUp($basketId));
return $basket;
}
public function addProduct(ProductId $productId, $name)
{
$this->basketCanOnlyContainFiveProducts->tryToAddProductToBasket();
$this->recordThat(
new ProductWasAddedToBasket($this->basketId, $productId, $name)
);
}
public function removeProduct(ProductId $productId)
{
$this->recordThat(
new ProductWasRemovedFromBasket($this->basketId, $productId)
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment