public async Task <FileProcessResult> ProcessFileAsync(string content, string fileExtension) { var parser = _fileParserFactory.GetParser(fileExtension); FileParseResult parseResult; try { parseResult = parser.ParseFile(content); } catch (Exception e) { var errorMessage = "Exception happened while parsing the document. Your file may be broken."; _logger.LogError(e, errorMessage); return(new FileProcessResult { IsSucceed = false, ErrorMessage = errorMessage }); } if (!parseResult.IsSucceed) { _logger.LogWarning($"Errors occured during CSV file parsing. Details: {parseResult.ErrorMessage}"); return(new FileProcessResult { IsSucceed = false, ErrorMessage = parseResult.ErrorMessage }); } var validationResult = _transactionValidator.ValidateTransactions(parseResult.TransactionList); if (!validationResult.IsSucceed) { return(new FileProcessResult { IsSucceed = false, ErrorMessage = validationResult.ErrorMessage }); } await _transactionService.InsertListAsync( _automapper.Map <List <EfContext.Transaction> >(parseResult.TransactionList)); return(new FileProcessResult { IsSucceed = true, ProcessedTransactions = parseResult.TransactionList.Count }); }