protected virtual async Task <ProductSpecificationApiModel> PrepareProductSpecificationAttributeModelAsync(Product product) { var result = new ProductSpecificationApiModel(); if (product == null) { var allProductSpecifications = new ProductSpecificationApiModel(); var specificationCacheKey = _staticCacheManager.PrepareKeyForDefaultCache(NopModelCacheDefaults.AllProductSpecificationsModelKey, product, await _storeContext.GetCurrentStoreAsync()); allProductSpecifications = await _staticCacheManager.GetAsync(specificationCacheKey, async() => { var productAllSpecificationAttributes = await _specificationAttributeService.GetProductSpecificationAttributesAsync(); foreach (var psa in productAllSpecificationAttributes) { var singleOption = await _specificationAttributeService.GetSpecificationAttributeOptionByIdAsync(psa.SpecificationAttributeOptionId); var checkModel = result.ProductSpecificationAttribute.FirstOrDefault(model => model.Id == singleOption.SpecificationAttributeId || model.Name == singleOption.Name); if (checkModel == null) { var model1 = new ProductSpecificationAttributeApiModel(); var attribute = await _specificationAttributeService.GetSpecificationAttributeByIdAsync(singleOption.SpecificationAttributeId); model1.Id = attribute.Id; model1.Name = await _localizationService.GetLocalizedAsync(attribute, x => x.Name); var options = await _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttributeAsync(attribute.Id); foreach (var option in options) { model1.Values.Add(new ProductSpecificationAttributeValueApiModel { AttributeTypeId = psa.AttributeTypeId, ColorSquaresRgb = option.ColorSquaresRgb, ValueRaw = psa.AttributeType switch { SpecificationAttributeType.Option => WebUtility.HtmlEncode(await _localizationService.GetLocalizedAsync(option, x => x.Name)), SpecificationAttributeType.CustomText => WebUtility.HtmlEncode(await _localizationService.GetLocalizedAsync(psa, x => x.CustomValue)), SpecificationAttributeType.CustomHtmlText => await _localizationService.GetLocalizedAsync(psa, x => x.CustomValue), SpecificationAttributeType.Hyperlink => $"<a href='{psa.CustomValue}' target='_blank'>{psa.CustomValue}</a>", _ => null } });
public ProductOverviewApiModel() { ProductSpecificationModel = new ProductSpecificationApiModel(); }