Esempio n. 1
0
        public async Task <IList <string> > ParseFileContentAndSaveData(string content, FileType fileType)
        {
            var parser = FileParserProvider.GetFileParser(fileType);
            var result = parser.ExtractDataFromContent(content);

            if (!result.HasError && result.Data.Any())
            {
                _logger.LogInformation($"Transaction data of file type {fileType} saved to database successfully! ");
                await _transactionRepository.AddRangeAsync(result.Data.ToList());
            }
            else
            {
                _logger.LogWarning($"Validation error during file upload of type: {fileType} .  Errors: {string.Join(",", result.Errors)}  , FileContent: {content} ");
            }

            return(result.Errors);
        }
        public async Task InsertAsync(List <TransactionModel> transactionsToExport, List <TransactionEntity> exportedDuplicates)
        {
            var duplicateIds = exportedDuplicates
                               .Select(x => x.TransactionId)
                               .ToList();

            var transactionsToInsert = transactionsToExport
                                       .Where(export => !duplicateIds.Contains(export.TransactionId))
                                       .ToList();

            if (!transactionsToInsert.Any())
            {
                return;
            }

            var mappedExports = _mapper.Map <IEnumerable <TransactionEntity> >(transactionsToExport);
            await _transactionRepository.AddRangeAsync(mappedExports);
        }
Esempio n. 3
0
        public async Task <bool> ReadFile(IFormFile file)
        {
            List <Transaction> transactions = new List <Transaction>();

            using (var reader = new StreamReader(file.OpenReadStream()))
                using (var csv = new CsvReader(reader, CultureInfo.GetCultureInfo("en-US")))
                {
                    csv.Configuration.TypeConverterOptionsCache.GetOptions(typeof(decimal))
                    .NumberStyle = NumberStyles.AllowCurrencySymbol |
                                   NumberStyles.AllowDecimalPoint;

                    transactions = csv.GetRecords <Transaction>().ToList();
                }

            await _transactionRepo.AddRangeAsync(transactions);

            return(true);
        }
Esempio n. 4
0
        public async Task <IEnumerable <Transaction> > AddNewTransactionsForAccounts(IEnumerable <string> accountIds)
        {
            var newTransactions = new List <Transaction>();
            var queuedAccounts  = _accountProcessQueue.Enqueue(accountIds).ToList();

            foreach (var accountId in queuedAccounts)
            {
                await _accountRepository.AddIfNotExistsAsync(accountId);

                var transactions = await GetNewTransactions(accountId);

                await _transactionRepository.AddRangeAsync(transactions);

                await _unitOfWork.CommitAsync();

                newTransactions.AddRange(transactions);
            }

            _accountProcessQueue.Dequeue(queuedAccounts);
            return(newTransactions);
        }