protected virtual async Task LoadDependenciesAsync(IEnumerable <Category> categories, IDictionary <string, Category> preloadedCategoriesMap) { var catalogsByIdDict = (await _catalogService.GetCatalogsListAsync()).ToDictionary(x => x.Id, StringComparer.OrdinalIgnoreCase).WithDefaultValue(null); foreach (var category in categories) { category.Catalog = catalogsByIdDict.GetValueOrThrow(category.CatalogId, $"catalog with key {category.CatalogId} doesn't exist"); category.IsVirtual = category.Catalog.IsVirtual; category.Parents = Array.Empty <Category>(); //Load all parent categories if (category.ParentId != null) { category.Parents = TreeExtension.GetAncestors(category, x => x.ParentId != null ? preloadedCategoriesMap[x.ParentId] : null) .Reverse() .ToArray(); category.Parent = category.Parents.LastOrDefault(); } category.Level = category.Parents?.Count() ?? 0; if (!category.Links.IsNullOrEmpty()) { foreach (var link in category.Links) { link.Catalog = catalogsByIdDict.GetValueOrThrow(link.CatalogId, $"link catalog with key {link.CatalogId} doesn't exist"); if (link.CategoryId != null) { if (preloadedCategoriesMap.ContainsKey(link.CategoryId)) { link.Category = preloadedCategoriesMap[link.CategoryId]; } } } } if (!category.Properties.IsNullOrEmpty()) { foreach (var property in category.Properties) { property.Catalog = catalogsByIdDict.GetValueOrThrow(property.CatalogId, $"property catalog with key {property.CatalogId} doesn't exist"); if (property.CategoryId != null) { if (preloadedCategoriesMap.ContainsKey(property.CategoryId)) { property.Category = preloadedCategoriesMap[property.CategoryId]; } } } } //Resolve relative urls for category assets if (category.Images != null) { foreach (var image in category.Images.Where(x => !string.IsNullOrEmpty(x.Url))) { image.RelativeUrl = image.Url; image.Url = _blobUrlResolver.GetAbsoluteUrl(image.Url); } } } }
protected virtual void LoadDependencies(IEnumerable <Category> categories, Dictionary <string, Category> preloadedCategoriesMap) { var catalogsMap = _catalogService.GetAllCatalogs().ToDictionary(x => x.Id, StringComparer.OrdinalIgnoreCase); foreach (var category in categories) { category.Catalog = catalogsMap.GetValueOrThrow(category.CatalogId, $"catalog with key {category.CatalogId} doesn't exist"); category.IsVirtual = category.Catalog.IsVirtual; category.Parents = Array.Empty <Category>(); //Load all parent categories if (category.ParentId != null) { category.Parents = TreeExtension.GetAncestors(category, x => x.ParentId != null && preloadedCategoriesMap.ContainsKey(x.ParentId) ? preloadedCategoriesMap[x.ParentId] : null) .Reverse() .ToArray(); category.Parent = category.Parents.Last(); } category.Level = category.Parents?.Count() ?? 0; if (!category.Links.IsNullOrEmpty()) { foreach (var link in category.Links) { link.Catalog = catalogsMap.GetValueOrThrow(link.CatalogId, $"link catalog with key {link.CatalogId} doesn't exist"); if (link.CategoryId != null) { if (preloadedCategoriesMap.ContainsKey(link.CategoryId)) { link.Category = preloadedCategoriesMap[link.CategoryId]; } } } } if (!category.Properties.IsNullOrEmpty()) { foreach (var property in category.Properties) { property.Catalog = catalogsMap.GetValueOrThrow(property.CatalogId, $"property catalog with key {property.CatalogId} doesn't exist"); if (property.CategoryId != null) { if (preloadedCategoriesMap.ContainsKey(property.CategoryId)) { property.Category = preloadedCategoriesMap[property.CategoryId]; } } } } //Resolve relative urls for category assets if (category.AllAssets != null) { foreach (var asset in category.AllAssets) { asset.Url = _blobUrlResolver.GetAbsoluteUrl(asset.RelativeUrl); } } } }
protected virtual void LoadDependencies(IEnumerable <Category> categories, Dictionary <string, Category> preloadedCategoriesMap) { var catalogsMap = _catalogService.GetCatalogsList().ToDictionary(x => x.Id, StringComparer.OrdinalIgnoreCase); foreach (var category in categories) { category.Catalog = catalogsMap.GetValueOrThrow(category.CatalogId, $"catalog with key {category.CatalogId} not exist"); category.IsVirtual = category.Catalog.IsVirtual; category.Parents = Array.Empty <Category>(); //Load all parent categories if (category.ParentId != null) { category.Parents = TreeExtension.GetAncestors(category, x => x.ParentId != null && preloadedCategoriesMap.ContainsKey(x.ParentId) ? preloadedCategoriesMap[x.ParentId] : null) .Reverse() .ToArray(); } category.Level = category.Parents.Length; if (!category.Links.IsNullOrEmpty()) { foreach (var link in category.Links) { link.Catalog = catalogsMap.GetValueOrThrow(link.CatalogId, $"link catalog with key {link.CatalogId} not exist"); if (link.CategoryId != null) { if (preloadedCategoriesMap.ContainsKey(link.CategoryId)) { link.Category = preloadedCategoriesMap[link.CategoryId]; } } } } if (!category.Properties.IsNullOrEmpty()) { foreach (var property in category.Properties) { property.Catalog = catalogsMap.GetValueOrThrow(property.CatalogId, $"property catalog with key {property.CatalogId} not exist"); if (property.CategoryId != null) { if (preloadedCategoriesMap.ContainsKey(property.CategoryId)) { property.Category = preloadedCategoriesMap[property.CategoryId]; } } } } } }
protected virtual async Task LoadDependenciesAsync(IEnumerable <Category> categories, IDictionary <string, Category> preloadedCategoriesMap) { var catalogsIds = new { categories }.GetFlatObjectsListWithInterface <IHasCatalogId>().Select(x => x.CatalogId).Where(x => x != null).Distinct().ToArray(); var catalogsByIdDict = (await _catalogService.GetByIdsAsync(catalogsIds)).ToDictionary(x => x.Id, StringComparer.OrdinalIgnoreCase); //Resolve relative urls for all category assets var allImages = new { categories }.GetFlatObjectsListWithInterface <IHasImages>().Where(x => x.Images != null).SelectMany(x => x.Images); foreach (var image in allImages.Where(x => !string.IsNullOrEmpty(x.Url))) { image.RelativeUrl = !string.IsNullOrEmpty(image.RelativeUrl) ? image.RelativeUrl : image.Url; image.Url = _blobUrlResolver.GetAbsoluteUrl(image.Url); } foreach (var category in categories) { category.Catalog = catalogsByIdDict.GetValueOrThrow(category.CatalogId, $"catalog with key {category.CatalogId} doesn't exist"); category.IsVirtual = category.Catalog.IsVirtual; category.Parents = Array.Empty <Category>(); //Load all parent categories if (category.ParentId != null) { category.Parents = TreeExtension.GetAncestors(category, x => x.ParentId != null ? preloadedCategoriesMap[x.ParentId] : null) .Reverse() .ToArray(); category.Parent = category.Parents.LastOrDefault(); } category.Level = category.Parents?.Count() ?? 0; foreach (var link in category.Links ?? Array.Empty <CategoryLink>()) { link.Catalog = catalogsByIdDict.GetValueOrThrow(link.CatalogId, $"link catalog with key {link.CatalogId} doesn't exist"); if (link.CategoryId != null) { link.Category = preloadedCategoriesMap[link.CategoryId]; } } foreach (var property in category.Properties ?? Array.Empty <Property>()) { property.Catalog = property.CatalogId != null ? catalogsByIdDict[property.CatalogId] : null; if (property.CategoryId != null) { property.Category = preloadedCategoriesMap[property.CategoryId]; } } } }