TransactionDataDto ITransactionDataParser.Parse(string data) { XmlSerializer serializer = new XmlSerializer(typeof(TransactionDataDto)); using TextReader reader = new StringReader(data); TransactionDataDto result = (TransactionDataDto)serializer.Deserialize(reader); return(result); }
public TransactionDataDto Parse(string data) { TransactionDataDto result = new TransactionDataDto(); var rows = data.Split(RowSplitter); foreach (var row in rows) { var transaction = ParseCsvRowToTransactionDto(row); result.Transactions.Add(transaction); } return(result); }
public async Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } IFormCollection files = await bindingContext.HttpContext.Request.ReadFormAsync(); UploadTransactionDataRequest result = new UploadTransactionDataRequest(); foreach (var file in files.Files) { ITransactionDataParser parser = _transactionDataParserFactory.CreateParser(file.ContentType); string fileContent = await GetFileContent(file); TransactionDataDto transactionData = parser.Parse(fileContent); result.TransactionData.Transactions.AddRange(transactionData.Transactions); } bindingContext.Result = ModelBindingResult.Success(result); }
public UploadTransactionDataRequest() { TransactionData = new TransactionDataDto(); }
public async Task <IActionResult> CreateTransaction(int id, [FromBody] TransactionDataDto transactionDataDto) { try { if (!ModelState.IsValid) { return(Json(new { errors = ModelState.Errors() })); } var userId = id; var amount = Math.Round(transactionDataDto.Amount, 2); var currency = transactionDataDto.Currency; var transactionType = transactionDataDto.TransactionType; var bonus = CalculateBonus(userId); var exchangeRates = await GetExchangeRates(currency); var points = CalculateLoyaltyPoints(amount, exchangeRates, transactionType); switch (transactionType) { case TransactionType.Deposit: _userTransactionDao.Add(userId, amount, currency, transactionType, points); _userAccountDao.Update(userId, amount, currency); break; case TransactionType.Withdraw: _userTransactionDao.Add(userId, amount, currency, transactionType, points); _userAccountDao.Update(userId, -amount, currency); break; case TransactionType.Purchase: _userTransactionDao.Add(userId, amount, currency, transactionType, points); _userAccountDao.Update(userId, amount, currency); _userAccountDao.Update(userId, Math.Round(-amount * exchangeRates.SellPrice * (1.00m - bonus) / exchangeRates.Unit, 2), Currency.PLN); break; case TransactionType.Sell: _userTransactionDao.Add(userId, amount, currency, transactionType, points); _userAccountDao.Update(userId, -amount, currency); _userAccountDao.Update(userId, Math.Round(amount * exchangeRates.PurchasePrice * (1.00m + bonus) / exchangeRates.Unit, 2), Currency.PLN); break; default: return(Json(new { errors = "Invalid transaction type." })); } return(Json(Ok())); } catch (InvalidOperationException ex) { return(Json(new { errors = ex.Message })); } }