private async Task CreatePurchaseOrder(int buyerId, int[] catalogItemIds)
        {
            var basketModel = new CreateBasketModel {
                BuyerId = buyerId
            };
            var createNewBasketCommand = _autoMapper.Map <CreateBasketModel, CreateBasketForUserCommand>(basketModel);

            await _commandBus.SendAsync(createNewBasketCommand);

            var basket = await _queryBus.SendAsync <GetBasketByBuyerId, Basket>(new GetBasketByBuyerId { BuyerId = buyerId });

            foreach (var catalogItemId in catalogItemIds)
            {
                var basketItemModel = new BasketItemModel
                {
                    BasketId = basket.BasketId, Price = 10M, Quantity = 1, CatalogItemId = catalogItemId
                };
                var addItemToBasketCommand = _autoMapper.Map <BasketItemModel, AddItemToBasketCommand>(basketItemModel);
                await _commandBus.SendAsync(addItemToBasketCommand);
            }

            basket = await _queryBus.SendAsync <GetBasketByBuyerId, Basket>(new GetBasketByBuyerId { BuyerId = buyerId });

            var createPurchaseOrderModel = new CreatePurchaseOrderModel();

            createPurchaseOrderModel.BasketId = basket.BasketId.ToString();
            var shippingAddress = new Address("126 BowhillWay", "Harlow",
                                              "Essex", "United Kingdom", "CM20 2FH");
            var crateOrderCommand = new CreatePurchaseOrderCommand(Guid.Parse(createPurchaseOrderModel.BasketId), shippingAddress);
            await _commandBus.SendAsync(crateOrderCommand);
        }
        public async Task Post([FromBody] CreatePurchaseOrderModel createPurchaseOrderModel)
        {
            _logger.LogInformation($"Create purchase order requested for basket {createPurchaseOrderModel.BasketId}");

            //Assumption: We call an API Or we get Address From User
            var shippingAddress = new Address("126 BowhillWay", "Harlow",
                                              "Essex", "United Kingdom", "CM20 2FH");
            var crateOrderCommand = new CreatePurchaseOrderCommand(Guid.Parse(createPurchaseOrderModel.BasketId), shippingAddress);
            await _commandBus.SendAsync(crateOrderCommand);
        }
        public void AddPurchase(CreatePurchaseOrderModel input)
        {
            var purchase = new PurchaseOrder
            {
                Description = input.Description,
                Price       = input.Price,
                Quantity    = input.Quantity,
                TotalAmount = input.Price * input.Quantity,
                CustomerId  = input.Customer
            };

            this.purchaseOrderRepository.Add(purchase);
            this.purchaseOrderRepository.SaveChanges();
        }
        public IActionResult Create(CreatePurchaseOrderModel purchase)
        {
            this.purchaseOrderService.AddPurchase(purchase);

            return(RedirectToAction("Index", "PurchaseOrder"));
        }