public async Task <ActionResult <GenericSearchResult <coreModel.DynamicContentFolder> > > DynamicContentPlaceListEntriesSearch([FromBody] coreModel.DynamicContentPlaceSearchCriteria criteria) { var retVal = new GenericSearchResult <coreModel.DynamicContentListEntry> { Results = new List <coreModel.DynamicContentListEntry>() }; var foldersSearchResult = await _dynamicConentSearchService.SearchFoldersAsync(new coreModel.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)); retVal.TotalCount += foldersSearchResult.TotalCount; retVal.Results.AddRange(foldersSearchResult.Results.Skip(folderSkip).Take(folderTake)); criteria.Skip = criteria.Skip - folderSkip; criteria.Take = criteria.Take - folderTake; var placesSearchResult = await _dynamicConentSearchService.SearchContentPlacesAsync(criteria); retVal.TotalCount += placesSearchResult.TotalCount; retVal.Results.AddRange(placesSearchResult.Results); return(Ok(retVal)); }
public async Task DoExportAsync(Stream outStream, Action <ExportImportProgressInfo> progressCallback, ICancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var progressInfo = new ExportImportProgressInfo { Description = "loading data..." }; progressCallback(progressInfo); using (var sw = new StreamWriter(outStream)) using (var writer = new JsonTextWriter(sw)) { await writer.WriteStartObjectAsync(); progressInfo.Description = "Promotions exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("Promotions"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, (skip, take) => _promotionSearchService.SearchPromotionsAsync(new PromotionSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } promotions have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content folders exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentFolders"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, (skip, take) => _dynamicContentSearchService.SearchFoldersAsync(new DynamicContentFolderSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content folders have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content items exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentItems"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, (skip, take) => _dynamicContentSearchService.SearchContentItemsAsync(new DynamicContentItemSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content items have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content places exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentPlaces"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, (skip, take) => _dynamicContentSearchService.SearchContentPlacesAsync(new DynamicContentPlaceSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content places have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content publications exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentPublications"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, (skip, take) => _dynamicContentSearchService.SearchContentPublicationsAsync(new DynamicContentPublicationSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content publications have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Coupons exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("Coupons"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, (skip, take) => _couponService.SearchCouponsAsync(new CouponSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } coupons have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Usages exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("Usages"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, (skip, take) => _promotionUsageService.SearchUsagesAsync(new PromotionUsageSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } usages have been exported"; progressCallback(progressInfo); }, cancellationToken); await writer.WriteEndObjectAsync(); await writer.FlushAsync(); } }
public async Task DoExportAsync(Stream outStream, Action <ExportImportProgressInfo> progressCallback, ICancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var progressInfo = new ExportImportProgressInfo { Description = "loading data..." }; progressCallback(progressInfo); using (var sw = new StreamWriter(outStream)) using (var writer = new JsonTextWriter(sw)) { await writer.WriteStartObjectAsync(); progressInfo.Description = "Promotions exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("Promotions"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => (GenericSearchResult <Promotion>) await _promotionSearchService.SearchPromotionsAsync(new PromotionSearchCriteria { Skip = skip, Take = take }) , (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } promotions have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content folders exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentFolders"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => { var searchResult = AbstractTypeFactory <DynamicContentFolderSearchResult> .TryCreateInstance(); var result = await LoadFoldersRecursiveAsync(null); searchResult.Results = result; searchResult.TotalCount = result.Count; return((GenericSearchResult <DynamicContentFolder>)searchResult); }, (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content folders have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content items exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentItems"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => (GenericSearchResult <DynamicContentItem>) await _dynamicContentSearchService.SearchContentItemsAsync(new DynamicContentItemSearchCriteria { Skip = skip, Take = take }) , (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content items have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content places exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentPlaces"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => (GenericSearchResult <DynamicContentPlace>) await _dynamicContentSearchService.SearchContentPlacesAsync(new DynamicContentPlaceSearchCriteria { Skip = skip, Take = take }) , (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content places have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content publications exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentPublications"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => { var searchResult = await _dynamicContentSearchService.SearchContentPublicationsAsync(new DynamicContentPublicationSearchCriteria { Skip = skip, Take = take }); return((GenericSearchResult <DynamicContentPublication>)searchResult); }, (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content publications have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Coupons exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("Coupons"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, (skip, take) => _couponService.SearchCouponsAsync(new CouponSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } coupons have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Usages exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("Usages"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, (skip, take) => _promotionUsageService.SearchUsagesAsync(new PromotionUsageSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } usages have been exported"; progressCallback(progressInfo); }, cancellationToken); await writer.WriteEndObjectAsync(); await writer.FlushAsync(); } }