public IHttpActionResult UpdateItems(DerivativeContractItem[] derivativeContractItems)
 {
     _derivativeContractService.SaveDerivativeContractItems(derivativeContractItems);
     return(StatusCode(HttpStatusCode.NoContent));
 }
        public void DoImport(Stream inputStream, PlatformExportManifest manifest, Action <ExportImportProgressInfo> progressCallback)
        {
            var progressInfo = new ExportImportProgressInfo();

            var contractsTotalCount = 0;
            var itemsTotalCount     = 0;

            using (StreamReader streamReader = new StreamReader(inputStream))
            {
                using (JsonTextReader jsonReader = new JsonTextReader(streamReader))
                {
                    while (jsonReader.Read())
                    {
                        if (jsonReader.TokenType != JsonToken.PropertyName)
                        {
                            continue;
                        }

                        if (jsonReader.Value.ToString() == "DerivativeContractsTotalCount")
                        {
                            contractsTotalCount = jsonReader.ReadAsInt32() ?? 0;
                        }
                        else if (jsonReader.Value.ToString() == "DerivativeContracts")
                        {
                            jsonReader.Read();

                            //read contracts into internal list and batch save them save
                            var totalImportedContracts = 0;
                            if (jsonReader.TokenType == JsonToken.StartArray)
                            {
                                jsonReader.Read();

                                var derivativeContract = new List <DerivativeContract>();
                                while (jsonReader.TokenType != JsonToken.EndArray)
                                {
                                    var contract = _serializer.Deserialize <DerivativeContract>(jsonReader);
                                    derivativeContract.Add(contract);
                                    totalImportedContracts++;

                                    jsonReader.Read();

                                    if (derivativeContract.Count % BatchSize == 0 || jsonReader.TokenType == JsonToken.EndArray)
                                    {
                                        //save batch
                                        _derivativeContractService.SaveDerivativeContracts(derivativeContract.ToArray());
                                        derivativeContract.Clear();

                                        progressInfo.Description = $"{ totalImportedContracts } of { contractsTotalCount } contracts imported";
                                        progressCallback(progressInfo);
                                    }
                                }
                            }
                        }
                        else if (jsonReader.Value.ToString() == "DerivativeContractItemsTotalCount")
                        {
                            itemsTotalCount = jsonReader.ReadAsInt32() ?? 0;
                        }
                        else if (jsonReader.Value.ToString() == "DerivativeContractItems")
                        {
                            jsonReader.Read();

                            //read items into internal list and batch save them save
                            var totalImportedItems = 0;
                            if (jsonReader.TokenType == JsonToken.StartArray)
                            {
                                jsonReader.Read();

                                var derivativeContractItems = new List <DerivativeContractItem>();
                                while (jsonReader.TokenType != JsonToken.EndArray)
                                {
                                    var item = _serializer.Deserialize <DerivativeContractItem>(jsonReader);
                                    derivativeContractItems.Add(item);
                                    totalImportedItems++;

                                    jsonReader.Read();

                                    if (derivativeContractItems.Count % BatchSize == 0 || jsonReader.TokenType == JsonToken.EndArray)
                                    {
                                        //save batch
                                        _derivativeContractService.SaveDerivativeContractItems(derivativeContractItems.ToArray());
                                        derivativeContractItems.Clear();

                                        progressInfo.Description = $"{ totalImportedItems } of { itemsTotalCount } items imported";
                                        progressCallback(progressInfo);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }