public async Task <ImportResultViewModel> ProcessFile(Stream stream) { var result = new ImportResultViewModel { LinesImported = 0, LinesIgnored = new List <string>() }; var linesProcessed = 1; using (var reader = new CSVTransactionReader(stream)) { var tran = new TransactionViewModel(); while (await reader.ReadTransactionAsync(tran)) { TransactionValidation.Validate(tran); if (tran.IsValid) { result.LinesImported++; _repository.Add(tran.ToTransaction()); } else { result.LinesIgnored.Add($"{linesProcessed} ignored, Reason: {tran.ValidationMessage}."); } linesProcessed++; } await _repository.SaveChangesAsync(); reader.Close(); } return(result); }
public async Task <bool> SaveTransaction(TransactionViewModel transaction) { var tran = await _repository.GetAsync <Transaction>(transaction.ID); if (tran != null) { _repository.Attach(transaction.ToTransaction()); } else { _repository.Add(transaction); } await _repository.SaveChangesAsync(); return(true); }
public async Task <IActionResult> PostTransaction([FromBody] TransactionViewModel transaction) { try { _logger.LogTrace("Transactions controller PostTransaction"); if (!ModelState.IsValid) { return(BadRequest(ModelState)); } await _transactions.RecordTransactionAsync(transaction.UserName, transaction.ToTransaction()); return(Ok()); } catch (ArgumentException e) { return(BadRequest(e)); } catch (Exception) { return(StatusCode(500)); } }