/**
* @param PlaceOrder $command
* @throws OrderAlreadyExistsException
* @throws \Dumplie\Customer\Domain\Exception\EmptyCartException
*/
public function handle(PlaceOrder $command)
{
$cartId = new CartId($command->cartId());
$orderId = new OrderId($command->orderId());
if ($this->orders->exists($orderId)) {
throw OrderAlreadyExistsException::withId($orderId);
}
$checkout = $this->checkouts->getForCart($cartId);
$order = $checkout->placeOrder($orderId, $this->products, $this->carts);
$this->orders->add($order);
$this->checkouts->removeForCart($cartId);
$this->carts->remove($cartId);
$this->eventLog->log(new CustomerPlacedOrder((string) $orderId));
}