Beispiel #1
0
        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);
        }