public async Task <ActionResult <DynamicContentListEntrySearchResult> > DynamicContentPlaceListEntriesSearch([FromBody] coreModel.DynamicContentPlaceSearchCriteria criteria) { var result = AbstractTypeFactory <DynamicContentListEntrySearchResult> .TryCreateInstance(); var folderSearchCriteria = new coreModel.DynamicContentFolderSearchCriteria { FolderId = criteria.FolderId, Keyword = criteria.Keyword, Take = criteria.Take, Skip = criteria.Skip, Sort = criteria.Sort }; var foldersSearchResult = await _folderSearchService.SearchFoldersAsync(folderSearchCriteria); var folderSkip = Math.Min(foldersSearchResult.TotalCount, criteria.Skip); var folderTake = Math.Min(criteria.Take, Math.Max(0, foldersSearchResult.TotalCount - criteria.Skip)); result.TotalCount += foldersSearchResult.TotalCount; result.Results.AddRange(foldersSearchResult.Results.Skip(folderSkip).Take(folderTake)); criteria.Skip -= folderSkip; criteria.Take -= folderTake; var placesSearchResult = await _contentPlacesSearchService.SearchContentPlacesAsync(criteria); result.TotalCount += placesSearchResult.TotalCount; result.Results.AddRange(placesSearchResult.Results); return(Ok(result)); }
private async Task <IList <DynamicContentFolder> > LoadFoldersRecursiveAsync(DynamicContentFolder folder) { var result = new List <DynamicContentFolder>(); var childrenFolders = (await _folderSearchService.SearchFoldersAsync(new DynamicContentFolderSearchCriteria { FolderId = folder?.Id, Take = int.MaxValue })).Results.ToList(); foreach (var childFolder in childrenFolders) { result.Add(childFolder); result.AddRange(await LoadFoldersRecursiveAsync(childFolder)); } return(result); }