private void RemoveReservation(ReservedStock reservedStock)
        {
            var itemIds = reservedStock.Items.Keys;
            var items   = _documentSession.Query <StockItem>().Where(x => itemIds.Any(iid => iid == x.Id)).ToList();

            foreach (var stockItem in items)
            {
                stockItem.Quantity += reservedStock.Items[stockItem.Id];
            }
        }
Example #2
0
        public Task Consume(ConsumeContext <BasketCheckedOut> context)
        {
            var basket = context.Message.Basket;

            //unabele to do this query, will have to do a number of selects
            //var itemIds = basket.Items.Select(x => x.Id).ToList();

            //var stockItems = _documentSession.Query<StockItem>().Where(x => itemIds.Any(id => id == x.Id)).ToList();

            var reserved = new ReservedStock()
            {
                Id = basket.Id
            };

            foreach (var basketItem in basket.Items)
            {
                //var stockItem = stockItems.FirstOrDefault(x => x.Id == basketItem.Id);
                var stockItem = _documentSession.Query <StockItem>().First(x => x.Id == basketItem.Id);
                if (stockItem.Quantity < basketItem.Quantity)
                {
                    continue;
                }

                reserved.Items.Add(basketItem.Id, basketItem.Quantity);
                stockItem.Quantity -= basketItem.Quantity;
            }

            _documentSession.Insert(reserved);
            _documentSession.SaveChanges();

            var reservedStock = new StockReserved()
            {
                Id    = reserved.Id,
                Items = reserved.Items
            };

            _bus.Publish(reservedStock);

            return(Task.CompletedTask);
        }