Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        /// <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);
            }
        }
Esempio n. 4
0
        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);
        }