Example #1
0
        public JObject Process(ProductPostProcessorData data)
        {
            foreach (var processor in _processors)
            {
                data.Product = processor.Process(data);
            }

            return(data.Product);
        }
Example #2
0
        public JObject Process(ProductPostProcessorData data)
        {
            var product = data.Product;

            if (!string.IsNullOrEmpty(Options.CreationDateField))
            {
                product.Add(new JProperty(Options.CreationDateField, data.Updated));
            }

            return(product);
        }
Example #3
0
        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));
        }
Example #4
0
        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);
        }