/// <summary> /// Данный метод сохраняет переданное дерево каталогов в базу данных /// </summary> /// <param name="catalogNode">Корневой каталог в переданном дереве каталогов. /// У данного каталога должен быть указан Id. Id подкаталогов и текстовых файлов вычисляются при добавлении</param> public void AddCatalogTree(CatalogParserNodeDto catalogNode) { List <CatalogParserNodeDto> catalogsOnCurrentDepthLevel = catalogNode.ChildrenNodes; foreach (CatalogParserNodeDto item in catalogsOnCurrentDepthLevel) { item.ParentCatalogId = catalogNode.Id; } foreach (TextBlock item in catalogNode.CatalogAttachments) { item.ParentCatalogId = catalogNode.Id; _textBlockDataAccess.Add(item); } while (catalogsOnCurrentDepthLevel.Count > 0) { List <CatalogParserNodeDto> catalogsOnNextDepthLevel = new List <CatalogParserNodeDto>(); foreach (var node in catalogsOnCurrentDepthLevel) { Catalog catalog = new Catalog { Name = node.Name, OrderInParentCatalog = node.Order, ParentCatalogId = node.ParentCatalogId }; _catalogDataAccess.Add(catalog); node.Id = catalog.Id; foreach (CatalogParserNodeDto item in node.ChildrenNodes) { item.ParentCatalogId = node.Id; catalogsOnNextDepthLevel.Add(item); } foreach (TextBlock item in node.CatalogAttachments) { item.ParentCatalogId = node.Id; _textBlockDataAccess.Add(item); } } catalogsOnCurrentDepthLevel = catalogsOnNextDepthLevel; } }
public IActionResult AddParseCatalogs([FromBody] CatalogParserNodeDto catalogNode) { _parsedCatalogsSaver.AddCatalogTree(catalogNode); return(RedirectToAction("Index", "Catalog", new { id = catalogNode.Id })); }