public JObject Process(ProductPostProcessorData data) { foreach (var processor in _processors) { data.Product = processor.Process(data); } return(data.Product); }
public JObject Process(ProductPostProcessorData data) { var product = data.Product; if (!string.IsNullOrEmpty(Options.CreationDateField)) { product.Add(new JProperty(Options.CreationDateField, data.Updated)); } return(product); }
public async Task <SonicResult> CreateAsync(JObject product, RegionTag[] regionTags, string language, string state) { var data = new ProductPostProcessorData(product); if (_productPostProcessor != null) { product = _productPostProcessor.Process(data); } var tagsProduct = GetRegionTagsProduct(product, regionTags, language, state); if (tagsProduct != null) { var tagsResult = await StoreFactory.GetProductStore(language, state).CreateAsync(tagsProduct, language, state); if (!tagsResult.Succeeded) { return(tagsResult); } } else { tagsProduct = GetRegionTagsProduct(product, new[] { new RegionTag() }, language, state); if (await StoreFactory.GetProductStore(language, state).Exists(tagsProduct, language, state)) { var deleteTagsResult = await StoreFactory.GetProductStore(language, state).DeleteAsync(tagsProduct, language, state); if (!deleteTagsResult.Succeeded) { return(deleteTagsResult); } } } return(await StoreFactory.GetProductStore(language, state).CreateAsync(product, language, state)); }
public JObject Process(ProductPostProcessorData data) { var product = data.Product; if (_arrayIndexingSettings == null) { return(product); } foreach (var setting in _arrayIndexingSettings) { JToken array = product.SelectToken(setting.Path); if (array == null) { continue; } if (array.Type != JTokenType.Array) { throw new Exception($"Тип элемента по пути {setting.Path} должен быть массивом"); } var topKeyTokens = array.SelectTokens("[*]." + setting.Keys[0]).ToArray(); if (!topKeyTokens.Any()) { continue; } JObject objectFromArray = new JObject(); foreach (var topKeyTokensWithArrayItem in topKeyTokens.GroupBy(x => x.Ancestors().First(y => y.Parent == array))) { JToken arrayItem = topKeyTokensWithArrayItem.Key; string keyValue = GetKeyValue(topKeyTokensWithArrayItem, setting.KeyPartsSeparator); if (string.IsNullOrEmpty(keyValue)) { continue; } foreach (string keyPart in setting.Keys.Skip(1)) { var keyTokens = arrayItem.SelectTokens(keyPart).ToArray(); if (keyTokens.Any()) { keyValue += setting.CompositeKeySeparator + GetKeyValue(keyTokens, setting.KeyPartsSeparator); } } var indexValue = objectFromArray[keyValue]; if (indexValue == null) { objectFromArray[keyValue] = arrayItem.DeepClone(); } else if (indexValue.Type == JTokenType.Array) { ((JArray)indexValue).Add(arrayItem); } else { objectFromArray[keyValue] = new JArray(indexValue, arrayItem); } } array.Parent.Parent.Add(new JProperty(setting.Name, objectFromArray)); } return(product); }