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); }
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); }
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); }