private List <FulfilmentDataResponse> SetFulfilmentDataResponse(SearchBatchResponse searchBatchResponse) { var listFulfilmentData = new List <FulfilmentDataResponse>(); foreach (var item in searchBatchResponse.Entries) { listFulfilmentData.Add(new FulfilmentDataResponse { BatchId = item.BatchId, EditionNumber = Convert.ToInt32(item.Attributes?.Where(a => a.Key == "EditionNumber").Select(b => b.Value).FirstOrDefault()), ProductName = item.Attributes?.Where(a => a.Key == "CellName").Select(b => b.Value).FirstOrDefault(), UpdateNumber = Convert.ToInt32(item.Attributes?.Where(a => a.Key == "UpdateNumber").Select(b => b.Value).FirstOrDefault()), FileUri = item.Files?.Select(a => a.Links.Get.Href), Files = item.Files }); } return(listFulfilmentData.OrderBy(a => a.ProductName).ThenBy(b => b.EditionNumber).ThenBy(c => c.UpdateNumber).ToList()); }
public async Task <List <Products> > GetNonCachedProductDataForFss(List <Products> products, SearchBatchResponse internalSearchBatchResponse, string exchangeSetRootPath, SalesCatalogueServiceResponseQueueMessage queueMessage, CancellationTokenSource cancellationTokenSource, CancellationToken cancellationToken) { var internalProductsNotFound = new List <Products>(); foreach (var item in products) { if (cancellationToken.IsCancellationRequested) { logger.LogError(EventIds.CancellationTokenEvent.ToEventId(), "Operation cancelled as IsCancellationRequested flag is true while searching ENC files from cache for Product/CellName:{ProductName}, EditionNumber:{EditionNumber} and UpdateNumbers:[{UpdateNumbers}]. BatchId:{batchId} and _X-Correlation-ID:{CorrelationId}", item.ProductName, item.EditionNumber, string.Join(",", item.UpdateNumbers.Select(a => a.Value.ToString())), queueMessage.BatchId, queueMessage.CorrelationId); throw new OperationCanceledException(); } var internalProductItemNotFound = new Products { Cancellation = item.Cancellation, Dates = item.Dates, EditionNumber = item.EditionNumber, FileSize = item.FileSize, ProductName = item.ProductName, UpdateNumbers = new List <int?>() }; List <int?> updateNumbers = new List <int?>(); foreach (var itemUpdateNumber in item.UpdateNumbers) { var compareProducts = $"{item.ProductName}|{item.EditionNumber.Value}|{itemUpdateNumber.Value}"; var productList = new List <string>(); if (!productList.Contains(compareProducts)) { var storageConnectionString = azureStorageService.GetStorageAccountConnectionString(fssCacheConfiguration.Value.CacheStorageAccountName, fssCacheConfiguration.Value.CacheStorageAccountKey); var cacheInfo = (FssSearchResponseCache)await azureTableStorageClient.RetrieveFromTableStorageAsync <FssSearchResponseCache>(item.ProductName, item.EditionNumber + "|" + itemUpdateNumber.Value, fssCacheConfiguration.Value.FssSearchCacheTableName, storageConnectionString); if (cacheInfo != null && !string.IsNullOrEmpty(cacheInfo.Response)) { var internalBatchDetail = await CheckIfCacheProductsExistsInBlob(exchangeSetRootPath, queueMessage, item, updateNumbers, itemUpdateNumber, storageConnectionString, cacheInfo); internalSearchBatchResponse.Entries.Add(internalBatchDetail); productList.Add(compareProducts); } else { internalProductItemNotFound.UpdateNumbers.Add(itemUpdateNumber); } } } if (internalProductItemNotFound.UpdateNumbers != null && internalProductItemNotFound.UpdateNumbers.Any()) { internalProductsNotFound.Add(internalProductItemNotFound); } } return(internalProductsNotFound); }