public async Task<CategoryViewModel> GetCategoriesAsync(long? categoryId = null, int levels = 1) { CategoryViewModel result; if (categoryId.HasValue) { var category = await _catalogApi.GetCategoryAsync(_catalogApi.GetCategoryUri(categoryId.Value)).ConfigureAwait(false); if (category == null) { result = null; } else { var parent = CreateCategoryViewModel(category, category.Id); await GenerateChildCategoryViewModels(parent, category.Categories, levels).ConfigureAwait(false); result = parent; } } else { var categories = await _catalogApi.GetCategoriesAsync().ConfigureAwait(false); var categoryViewModel = new CategoryViewModel { CategoryId = 0, DisplayName = "Root", Image = string.Empty }; await GenerateChildCategoryViewModels(categoryViewModel, categories, levels).ConfigureAwait(false); result = categoryViewModel; } return result; }
private async Task GenerateChildCategoryViewModels(CategoryViewModel categoryViewModel, Categories categories, int levelsRemaining) { if (levelsRemaining <= 0 || categories == null || categories.Category == null) return; foreach (var item in categories.Category) { var currentCategory = await _catalogApi.GetCategoryAsync(item).ConfigureAwait(false); var itemViewModel = CreateCategoryViewModel(currentCategory, currentCategory.Id); categoryViewModel.Items.Add(itemViewModel); await GenerateChildCategoryViewModels(itemViewModel, currentCategory.Categories, levelsRemaining - 1).ConfigureAwait(false); } }