public async Task Upload(Stream fileStream, string name, string fileType) { await _fileStorageAdapter.Upload(fileStream, name); // This is done to have ability later make this process asyncronus var fileContent = await _fileStorageAdapter.DownloadFile(name); //var fileString = await _fileStorageAdapter.DownloadAsString(name); var parser = _parserFactory.GetParser(fileType); var parsingResult = parser.Parse(fileContent); if (!parsingResult.IsSuccess) { throw new Exception(); } if (parsingResult.Results.Count == 0) { return; } var transactionsRepository = _unitOfWork.Transactions; var createTranscationCommands = parsingResult.Results.Select(ToCommand).ToArray(); await transactionsRepository.AddRange(createTranscationCommands); await _unitOfWork.SaveChanges(); }