public async Task <DynamicContentItemSearchResult> SearchContentItemsAsync(DynamicContentItemSearchCriteria criteria) { var cacheKey = CacheKey.With(GetType(), nameof(SearchContentItemsAsync), criteria.GetCacheKey()); return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(DynamicContentItemCacheRegion.CreateChangeToken()); var result = AbstractTypeFactory <DynamicContentItemSearchResult> .TryCreateInstance(); using (var repository = _repositoryFactory()) { var sortInfos = BuildSortExpression(criteria); var query = BuildQuery(criteria, repository); result.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { var ids = await query.OrderBySortInfos(sortInfos).ThenBy(x => x.Id) .Select(x => x.Id) .Skip(criteria.Skip).Take(criteria.Take) .ToArrayAsync(); result.Results = (await _dynamicContentService.GetContentItemsByIdsAsync(ids)) .OrderBy(x => Array.IndexOf(ids, x.Id)).ToList(); } } return result; })); }
public GenericSearchResult <coreModel.DynamicContentItem> SearchContentItems(DynamicContentItemSearchCriteria criteria) { var retVal = new GenericSearchResult <coreModel.DynamicContentItem>(); using (var repository = _repositoryFactory()) { var query = repository.Items; if (!string.IsNullOrEmpty(criteria.FolderId)) { query = query.Where(x => x.FolderId == criteria.FolderId); } if (!string.IsNullOrEmpty(criteria.Keyword)) { query = query.Where(q => q.Name.Contains(criteria.Keyword)); } var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = ReflectionUtility.GetPropertyName <coreModel.DynamicContentItem>(x => x.Name), SortDirection = SortDirection.Ascending } }; } query = query.OrderBySortInfos(sortInfos); retVal.TotalCount = query.Count(); var ids = query.Select(x => x.Id) .Skip(criteria.Skip) .Take(criteria.Take).ToArray(); retVal.Results = _dynamicContentService.GetContentItemsByIds(ids); } return(retVal); }
public IHttpActionResult DynamicContentItemsEntriesSearch(DynamicContentItemSearchCriteria criteria) { var retVal = new GenericSearchResult <webModel.DynamicContentListEntry>(); retVal.Results = new List <webModel.DynamicContentListEntry>(); var foldersSearchResult = _dynamicConentSearchService.SearchFolders(new DynamicContentFolderSearchCriteria { FolderId = criteria.FolderId, Keyword = criteria.Keyword, Take = criteria.Take, Skip = criteria.Skip, Sort = criteria.Sort }); var folderSkip = Math.Min(foldersSearchResult.TotalCount, criteria.Skip); var folderTake = Math.Min(criteria.Take, Math.Max(0, foldersSearchResult.TotalCount - criteria.Skip)); var folders = foldersSearchResult.Results.Skip(folderSkip).Take(folderTake).Select(x => x.ToWebModel()); retVal.TotalCount += foldersSearchResult.TotalCount; retVal.Results.AddRange(folders); criteria.Skip = criteria.Skip - folderSkip; criteria.Take = criteria.Take - folderTake; var itemsSearchResult = _dynamicConentSearchService.SearchContentItems(criteria); retVal.TotalCount += itemsSearchResult.TotalCount; retVal.Results.AddRange(itemsSearchResult.Results.Select(x => x.ToWebModel())); return(Ok(retVal)); }
public IHttpActionResult DynamicContentItemsSearch(DynamicContentItemSearchCriteria criteria) { var retVal = new GenericSearchResult <webModel.DynamicContentItem>(); var itemsSearchResult = _dynamicConentSearchService.SearchContentItems(criteria); retVal.TotalCount = itemsSearchResult.TotalCount; retVal.Results = itemsSearchResult.Results.Select(x => x.ToWebModel()).ToList(); return(Ok(retVal)); }
protected virtual IQueryable <DynamicContentItemEntity> BuildQuery(DynamicContentItemSearchCriteria criteria, IMarketingRepository repository) { var query = repository.Items; if (!string.IsNullOrEmpty(criteria.FolderId)) { query = query.Where(x => x.FolderId == criteria.FolderId); } if (!string.IsNullOrEmpty(criteria.Keyword)) { query = query.Where(q => q.Name.Contains(criteria.Keyword)); } return(query); }
protected virtual IList <SortInfo> BuildSortExpression(DynamicContentItemSearchCriteria criteria) { var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = nameof(DynamicContentItem.Name), SortDirection = SortDirection.Ascending } }; } return(sortInfos); }
public async Task <DynamicContentItemSearchResult> SearchContentItemsAsync(DynamicContentItemSearchCriteria criteria) { var cacheKey = CacheKey.With(GetType(), "SearchContentItemsAsync", criteria.GetCacheKey()); return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(DynamicContentItemCacheRegion.CreateChangeToken()); var retVal = AbstractTypeFactory <DynamicContentItemSearchResult> .TryCreateInstance(); using (var repository = _repositoryFactory()) { var query = repository.Items; if (!string.IsNullOrEmpty(criteria.FolderId)) { query = query.Where(x => x.FolderId == criteria.FolderId); } if (!string.IsNullOrEmpty(criteria.Keyword)) { query = query.Where(q => q.Name.Contains(criteria.Keyword)); } var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = ReflectionUtility.GetPropertyName <DynamicContentItem>(x => x.Name), SortDirection = SortDirection.Ascending } }; } query = query.OrderBySortInfos(sortInfos); retVal.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { var ids = await query.Select(x => x.Id).Skip(criteria.Skip).Take(criteria.Take).ToArrayAsync(); retVal.Results = await _dynamicContentService.GetContentItemsByIdsAsync(ids); } } return retVal; })); }
protected virtual GenericSearchResult <DynamicContentItem> LoadContentItems(DynamicContentItemSearchCriteria criteria) { return(_dynamicContentSearchService.SearchContentItems(criteria)); }