Пример #1
0
        public Category(EkProductCategory productCategory, CategorySpecialTypeEnum?specialType = null)
        {
            Assure.ArgumentNotNull(productCategory, nameof(productCategory));

            ProductCategory = productCategory;
            Type            = CategoryTypeEnum.ProductCategory;
            SpecialType     = specialType;

            Id      = productCategory.CategoryId;
            Name    = productCategory.Name?.GetValue(Languages.RussianCode);
            IsGroup = productCategory.Children?.Length > 0;
        }
Пример #2
0
        private static void Main(string[] args)
        {
            JsonDefaultSettings.Initialize();

            using (var reader = new StreamReader("Categories.csv", Encoding.UTF8))
            {
                using (var csvReader = new CsvReader(reader))
                {
                    var records = csvReader.GetRecords <CsvRecord>()
                                  .ToArray();
                    var parsedRecords = records
                                        .Select(x => new
                    {
                        Record    = x,
                        NameParts = x.Name
                                    .Split('>')
                                    .Select(p => p
                                            .Trim()
                                            .Replace(" , ", ", "))
                                    .ToArray(),
                    })
                                        .ToArray();
                    var maxDepth = parsedRecords.Max(x => x.NameParts.Length);

                    var categories     = new Dictionary <string, EkProductCategory>();
                    var rootCategories = new List <EkProductCategory>();
                    for (var depth = 1; depth <= maxDepth; depth++)
                    {
                        var depthCategoryRecords = parsedRecords
                                                   .Where(x => x.NameParts.Length == depth)
                                                   .ToArray();
                        foreach (var parsedRecord in depthCategoryRecords)
                        {
                            var fullName = string.Join(">", parsedRecord.NameParts);
                            var category = new EkProductCategory()
                            {
                                CategoryId = parsedRecord.Record.Id,
                                Name       = new MultiLanguageString()
                                {
                                    [Languages.RussianCode] = parsedRecord.NameParts.Last(),
                                },
                            };
                            if (categories.ContainsKey(fullName))
                            {
                                throw new InvalidOperationException("Duplicate!");
                            }

                            categories[fullName] = category;
                            if (depth != 1)
                            {
                                var parentFullName = string.Join(">", parsedRecord.NameParts.Take(parsedRecord.NameParts.Length - 1));
                                var parentCategory = categories[parentFullName];
                                if (parentCategory.Children == null)
                                {
                                    parentCategory.Children = new EkProductCategory[]
                                    {
                                        category,
                                    };
                                }
                                else
                                {
                                    var newChildren = new List <EkProductCategory>(parentCategory.Children)
                                    {
                                        category
                                    };
                                    parentCategory.Children = newChildren.ToArray();
                                }
                            }
                            else
                            {
                                // root category
                                rootCategories.Add(category);
                            }
                        }
                    }

                    // order children by name
                    foreach (var category in categories.Values
                             .Where(x => x.Children?.Length > 0))
                    {
                        category.Children = category.Children
                                            .OrderBy(x => x.Name.GetValue(Languages.RussianCode))
                                            .ToArray();
                    }

                    // rename auto-parts
                    var autoPartsCategory = rootCategories
                                            .Where(x => x.Name[Languages.RussianCode] == "Автозапчасти")
                                            .First();
                    autoPartsCategory.Name[Languages.RussianCode] = "Запчасти легковые и грузовые";

                    var json = JsonConvert.SerializeObject(rootCategories);
                }
            }

            Console.WriteLine("Hello World!");
        }