/**
* @param NewCheckout $command
* @throws CheckoutAlreadyExistsException
* @throws InvalidArgumentException
* @throws CartNotFoundException
* @throws InvalidUUIDFormatException
*/
public function handle(NewCheckout $command)
{
$cartId = new CartId($command->cartId());
if (!$this->carts->exists($cartId)) {
throw new CartNotFoundException();
}
$billingAddress = new Address($command->name(), $command->street(), $command->postCode(), $command->city(), $command->countryIso2Code());
if ($this->checkouts->existsForCart($cartId)) {
throw new CheckoutAlreadyExistsException();
}
$this->checkouts->add(new Checkout($cartId, $billingAddress));
}