private Task <List <MetalDto> > GetModelMetals(ParsedJewelryModel model) { var metalConfigs = model.Configurations .Where(c => c.ConfigurationType == JewelryModelConfigType.Options) .Select(c => c.ConfigOptions) .Cast <SelectorOptions>() .Where(s => s.OptionsSource == OptionsSource.Metal) .ToList(); if (metalConfigs.Count == 0) { return(Task.FromResult(new List <MetalDto>())); } var allIds = metalConfigs.SelectMany(m => m.ExternalSourceIds).Distinct().ToList(); return(_metalDao.LoadMetaldByIds(allIds)); }
private Task <List <GemstoneDto> > GetModelGemstones(ParsedJewelryModel model) { var gemConfigs = model.Configurations .Where(c => c.ConfigurationType == JewelryModelConfigType.Options) .Select(c => c.ConfigOptions) .Cast <SelectorOptions>() .Where(s => s.OptionsSource == OptionsSource.Gemstone) .ToList(); if (gemConfigs.Count == 0) { return(Task.FromResult(new List <GemstoneDto>())); } ; var allIds = gemConfigs.SelectMany(m => m.ExternalSourceIds).Distinct().ToList(); return(_gemstoneDao.LoadGemstonesByIds(allIds)); }
public ConfiguredModel( ParsedJewelryModel model, List <string> configIds, ExpressionTerms expressionTerms) { _model = model; _expressionTerms = expressionTerms; if (configIds.Count != _model.Configurations.Count) { throw new ApplicationException( $"Could not parse model configuration values of configIDs '{string.Join(_expressionTerms.SkuSeparator, configIds)}'. Actual model config number: {model.Configurations.Count}!"); } model.Configurations = model.Configurations.OrderBy(c => c.Order).ToList(); Configs = new List <SpecificModelConfig>(); for (var i = 0; i < model.Configurations.Count; ++i) { Configs.Add(new SpecificModelConfig(model.Configurations[i], configIds[i])); } }
private async Task FillActualSelectorOptions(ParsedJewelryModel model) { var metals = (await GetModelMetals(model)).ToDictionary(m => m.Id); var gemstones = (await GetModelGemstones(model)).ToDictionary(g => g.Id); foreach (var config in model.Configurations .Where(c => c.ConfigurationType == JewelryModelConfigType.Options) .Select(c => c.ConfigOptions).Cast <SelectorOptions>()) { switch (config.OptionsSource) { case OptionsSource.Gemstone: config.GemstoneSource = config.ExternalSourceIds.Select(id => gemstones[id]).ToList(); break; case OptionsSource.Metal: config.MetalSource = config.ExternalSourceIds.Select(id => metals[id]).ToList(); break; } } }