Exemple #1
0
        private async Task <List <CatalogItem> > LoadCatalogItems()
        {
            var catalogSkus = await _skuDescriptionDao.LoadCatalogSkus();

            var tasks = catalogSkus.Select(async sku =>
            {
                var model = await _modelParser.ParseFromSku(sku.Sku);
                return(new CatalogItem
                {
                    Sku = sku.Sku,
                    ModelIdentifier = model.Identifier,
                    Tags = JsonConvert.DeserializeObject <List <string> >(sku.Tags),
                    ProductLabel = sku.ProductLabel,
                    Price = await _expressionCalculatorService.CalculateExpression(model.PriceExpression, model),
                    ImagePath = JsonConvert.DeserializeObject <List <string> >(sku.Images)?.FirstOrDefault(),
                    DisplayNameParts = GetNameParts(model),
                    DescriptionParts = GetDescriptionParts(model)
                });
            });

            var result = new List <CatalogItem>();

            foreach (var task in tasks)
            {
                result.Add(await task);
            }
            return(result);
        }
Exemple #2
0
        public Task <ModelInfo> GetModelInfoBySku(string sku)
        {
            var key = string.Format(ModelInfoFormat, sku);

            return(_cache.GetValue(key, async() =>
            {
                var model = await _modelParser.ParseFromSku(sku);
                var modelInfo = new ModelInfo
                {
                    Price = await _expressionCalculatorService.CalculateExpression(model.PriceExpression, model),
                    Weight = await _expressionCalculatorService.CalculateExpression(model.WeightExpression, model),
                    Nodes = model.Configs.Select(c => {
                        var node = c.SelectedItem.Info;
                        node.NameKey = c.NameKey;
                        return node;
                    }).ToList()
                };
                modelInfo.Weight = Math.Floor(modelInfo.Weight * 100) / 100;
                return modelInfo;
            }));
        }