public OrderProcessedViewModel Handle(ProcessOrderAfterPaymentCommand command) { // 1. Create order ID var tempOrderId = _requestService.GenerateTemporaryOrderId(); // 2. Register order in the system var order = Domain.Orders.Order.CreateFromShoppingCart(tempOrderId, command.ShoppingCart.OrderRequest); var orderId = _orderRepository.AddAndReturnKey(order); // 3. Ship var shipmentDetails = _shipmentService.SendRequestForDelivery(order); // 4. Update fidelity card and membership status // Prepare model var model = new OrderProcessedViewModel { OrderId = orderId.ToString(CultureInfo.InvariantCulture), PaymentDetails = { TransactionId = command.TransactionId }, ShippingDetails = shipmentDetails }; return(model); }