public override List <StockLevel> Execute(InmemoryModel model)
 {
     return(model.GetStockLevelsByProduct(ProductId));
 }
        public static InmemoryModel BuildAndSeedDemo()
        {
            var model = new InmemoryModel();
            var rng   = new Random(0);

            for (int i = 1; i <= 1000; i++)
            {
                var customer = new Customer()
                {
                    Id   = i,
                    Name = "Customer " + i
                };

                model._customers.Add(i, customer);
            }

            for (int i = 1; i <= 1000000; i++)
            {
                var product = new Product()
                {
                    Id          = i,
                    Name        = "Product " + i,
                    Description = "Description of product " + i,
                    UnitPrice   = rng.Next(10, 1000)
                };
                model._products.Add(i, product);
            }

            for (int i = 1; i <= 10000; i++)
            {
                var warehouse = new Warehouse
                {
                    Id       = i,
                    Location = "Warehouse " + i
                };
                model._warehouses.Add(i, warehouse);
            }

            for (int i = 1; i <= 900; i++)
            {
                var stockLevels = new SortedDictionary <int, int>();

                for (int j = 0; j < 1000; j++)
                {
                    int randomWarehouse = rng.Next(1, 10000);
                    int level           = rng.Next(0, 1200);
                    if (rng.NextDouble() < 0.1)
                    {
                        level = 0;                         //10% chance out of stock
                    }
                    stockLevels[randomWarehouse] = level;
                }

                var product = model._products[i];
                foreach (var warehouseId in stockLevels.Keys)
                {
                    var warehouse = model._warehouses[warehouseId];
                    product.StockLevels.Add(new StockLevel
                    {
                        Product      = product,
                        Warehouse    = warehouse,
                        UnitsInStock = stockLevels[warehouseId]
                    });
                }
            }
            return(model);
        }
 public override List <Product> Execute(InmemoryModel model)
 {
     return(model.GetProducts(Skip, Take));
 }