public void DoImport(Stream backupStream, Action <ExportImportProgressInfo> progressCallback) { var backupObject = backupStream.DeserializeJson <BackupObject>(); progressCallback(new ExportImportProgressInfo($"The {backupObject.FulfillmentCenters.Count()} fulfilmentCenters are importing")); _fulfillmentCenterService.SaveChanges(backupObject.FulfillmentCenters); progressCallback(new ExportImportProgressInfo($"The {backupObject.FulfillmentCenters.Count()} fulfilmentCenters has been imported")); const int batchSize = 50; var totalCount = backupObject.InventoryInfos.Count(); progressCallback(new ExportImportProgressInfo($"The {totalCount} inventories are importing")); for (int i = 0; i < totalCount; i += batchSize) { _inventoryService.UpsertInventories(backupObject.InventoryInfos.Skip(i).Take(batchSize)); progressCallback(new ExportImportProgressInfo($"{i} of {totalCount} inventories records have been imported")); } progressCallback(new ExportImportProgressInfo("The inventory module data has been imported")); }
public void DoImport(Stream backupStream, Action <ExportImportProgressInfo> progressCallback) { var progressInfo = new ExportImportProgressInfo(); var inventoryInfos = new List <InventoryInfo>(); using (var streamReader = new StreamReader(backupStream)) using (var reader = new JsonTextReader(streamReader)) { while (reader.Read()) { if (reader.TokenType == JsonToken.PropertyName) { var readerValue = reader.Value.ToString(); if (readerValue == "InventoryInfos") { reader.Read(); if (reader.TokenType == JsonToken.StartArray) { reader.Read(); while (reader.TokenType != JsonToken.EndArray) { var inventoryInfo = AbstractTypeFactory <InventoryInfo> .TryCreateInstance(); inventoryInfo = _jsonSerializer.Deserialize(reader, inventoryInfo.GetType()) as InventoryInfo; inventoryInfos.Add(inventoryInfo); reader.Read(); } } } else if (readerValue == "FulfillmentCenters") { reader.Read(); var fulfillmentCentersType = AbstractTypeFactory <FulfillmentCenter> .TryCreateInstance().GetType().MakeArrayType(); var fulfillmentCenters = _jsonSerializer.Deserialize(reader, fulfillmentCentersType) as FulfillmentCenter[]; progressInfo.Description = $"The {fulfillmentCenters.Count()} fulfillmentCenters have been imported"; progressCallback(progressInfo); _fulfillmentCenterService.SaveChanges(fulfillmentCenters); } } } // TODO: Need to handle saving inventories some way different as stream import does not make sense when all objects are in memory. var totalCount = inventoryInfos.Count; for (var i = 0; i < totalCount; i += BatchSize) { progressInfo.ProcessedCount += Math.Min(BatchSize, totalCount - i); progressInfo.Description = $"{progressInfo.ProcessedCount} inventories records have been imported"; progressCallback(progressInfo); _inventoryService.UpsertInventories(inventoryInfos.Skip(i).Take(BatchSize).ToArray()); } } }
public IHttpActionResult SaveFulfillmentCenter(FulfillmentCenter center) { _fulfillmentCenterService.SaveChanges(new[] { center }); return(Ok(center)); }