Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
            }
        }