示例#1
0
        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
            });
        }