public ActionResult Add(AddNewOrderViewModel model)
        {
            Argument.ExpectNotNull(() => model);

            if (ModelState.IsValid)
            {
                var itemId = new OrderItemId(ServiceLocator.IdentityGenerator.GenerateNewId());
                var cmd = new AddProductToOrder(
                                model.OrderId,
                                itemId,
                                new Uri(model.ProductUrl),
                                model.Name,
                                model.Description,
                                model.Price.Value,
                                model.Quantity.Value,
                                model.Size,
                                model.Color,
                                String.IsNullOrEmpty(model.ImageUrl) ? null : new Uri(model.ImageUrl));
                _bus.Send(cmd);

                //TODO: figure out how to avoid this
                Thread.Sleep(100);

                return RedirectToAction("Add");
            }

            return View(model);
        }
        public ActionResult Add()
        {
            OrderId activeOrderId = _readModel.GetUserActiveOrderId(UserId);
            UserDetails userDetails = _readModel.GetUserDetails(UserId);

            if (activeOrderId == null)
            {
                activeOrderId = new OrderId(ServiceLocator.IdentityGenerator.GenerateNewId());
                _bus.Send(new CreateNewOrder(activeOrderId, UserId));
            }

            var model = new AddNewOrderViewModel(activeOrderId, userDetails.Email);

            return View(model);
        }
        public ActionResult Submit(AddNewOrderViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (model.IsEmailChanged)
                {
                    _bus.Send(new SetUserEmail(UserId, new EmailAddress(model.Email)));
                    Thread.Sleep(200);
                }

                _bus.Send(new SubmitOrder(model.OrderId));

                return RedirectToAction("Submitted", new { id = model.OrderId.Id });
            }

            return View("Add", model);
        }