BudgetAnalyser.Engine.Statement.CsvOnDiskStatementModelRepositoryV1.SaveAsync C# (CSharp) Метод

SaveAsync() приватный Метод

private SaveAsync ( StatementModel model, string storageKey, bool isEncrypted ) : System.Threading.Tasks.Task
model StatementModel
storageKey string
isEncrypted bool
Результат System.Threading.Tasks.Task
        public async Task SaveAsync(StatementModel model, string storageKey, bool isEncrypted)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            if (storageKey.IsNothing())
            {
                throw new ArgumentNullException(nameof(storageKey));
            }

            var transactionSet = this.mapper.ToDto(model);
            transactionSet.VersionHash = VersionHash;
            transactionSet.StorageKey = storageKey;
            transactionSet.Checksum = CalculateTransactionCheckSum(transactionSet);
            if (model.AllTransactions.Count() != transactionSet.Transactions.Count())
            {
                throw new StatementModelChecksumException(
                    string.Format(
                        CultureInfo.InvariantCulture,
                        "Only {0} out of {1} transactions have been mapped correctly. Aborting the save, to avoid data loss and corruption.",
                        transactionSet.Transactions.Count,
                        model.AllTransactions.Count()));
            }

            var writer = this.readerWriterSelector.SelectReaderWriter(isEncrypted);
            using (var stream = writer.CreateWritableStream(storageKey)) 
            {
                using (var streamWriter = new StreamWriter(stream))
                {
                    WriteHeader(streamWriter, transactionSet);

                    foreach (var transaction in transactionSet.Transactions)
                    {
                        var line = new StringBuilder();
                        line.Append(transaction.TransactionType);
                        line.Append(",");

                        line.Append(transaction.Description);
                        line.Append(",");

                        line.Append(transaction.Reference1);
                        line.Append(",");

                        line.Append(transaction.Reference2);
                        line.Append(",");

                        line.Append(transaction.Reference3);
                        line.Append(",");

                        line.Append(transaction.Amount);
                        line.Append(",");

                        line.Append(transaction.Date.ToString("O", CultureInfo.InvariantCulture));
                        line.Append(",");

                        line.Append(transaction.BudgetBucketCode);
                        line.Append(",");

                        line.Append(transaction.Account);
                        line.Append(",");

                        line.Append(transaction.Id);
                        line.Append(",");

                        await streamWriter.WriteLineAsync(line.ToString());
                    }

                    await streamWriter.FlushAsync();
                }
            }
        }