internal static byte[] BuildUploadedData(UploadTransaction t) { int dataLength = 0; byte[] data; foreach (var block in t.DataBlocks) { dataLength += block.Length; } data = new byte[dataLength]; int dataOffset = 0; foreach (var block in t.DataBlocks) { int remainingLength = data.Length - dataOffset; if (block.Length < remainingLength) { remainingLength = block.Length; } if (remainingLength > 0) { Buffer.BlockCopy(block, 0, data, dataOffset, remainingLength); } dataOffset += block.Length; } return(data); }
public async Task <UploadTransaction> AddAsync(UploadTransaction transaction, CancellationToken cancellationToken) { var addedEntry = await m_dbContext.UploadTransactions.AddAsync(transaction, cancellationToken); await m_dbContext.SaveChangesAsync(cancellationToken); return(addedEntry.Entity); }
/// <summary> /// /// </summary> /// <param name="file"></param> /// <returns></returns> public override List <UploadTransaction> ExtractTransaction(IFormFile file) { using (var reader = new StreamReader(file.OpenReadStream())) { var entities = new List <UploadTransaction>(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(reader); var nodeList = xmlDoc.SelectNodes("/Transactions/Transaction"); foreach (XmlNode item in nodeList) { var errors = new List <string>(); DateTimeOffset transDate; Decimal amount; var transactionId = (item.Attributes.GetNamedItem("id")?.Value ?? "").Trim(); if (transactionId.Length == 0 || transactionId.Length > TRANSACTIONID_MAX_LENGTH) { errors.Add("Invalid TransactionId"); } var strTransDate = (item.SelectSingleNode("TransactionDate")?.InnerText ?? "").Trim(); if (!DateTimeOffset.TryParseExact(strTransDate, XML_DATE_FORMAT, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out transDate)) { errors.Add("Invalid Transaction Date"); } var strAmount = (item.SelectSingleNode("PaymentDetails/Amount")?.InnerText ?? "").Trim(); if (!Decimal.TryParse(strAmount, out amount)) { errors.Add("Invalid Payment Amount"); } var currencyCode = (item.SelectSingleNode("PaymentDetails/CurrencyCode")?.InnerText ?? "").Trim(); if (currencyCode.Length != 3) { errors.Add("Invalid Currency Code"); } var status = (item.SelectSingleNode("Status")?.InnerText ?? "").Trim(); if (!xmlValidStatusCode.Contains(status)) { errors.Add("Invalid Status Code"); } var xmlTransaction = new UploadTransaction() { TransactionId = transactionId, Amount = strAmount, ValidAmount = amount, CurrencyCode = currencyCode, TransactionDate = strTransDate, ValidTransactionDate = transDate, Status = status, ValidStatus = GetXmlStatusCode(status), Errors = string.Join(", ", errors) }; entities.Add(xmlTransaction); } return(entities); } }
public async Task <UploadTransaction> StartTransaction(StorageItem item, CancellationToken cancellationToken) { var transaction = new UploadTransaction { Id = Guid.NewGuid(), DriveId = item.DriveId, StorageItemId = item.Id, Timestamp = DateTime.UtcNow }; transaction.UploadUri = m_blobContainerClient.GetBlobClient($"{item.DriveId}/{item.Id}") .GenerateSasUri(BlobSasPermissions.Read | BlobSasPermissions.Write, DateTime.UtcNow.AddHours(1)); await m_transactions.AddAsync(transaction, cancellationToken); return(transaction); }