public async Task <ResponseDTO <bool> > UploadPartFileAsync(FilePartDTO filePart, Guid fileId) { var response = new ResponseDTO <bool>(); var file = await _context.Files.FirstOrDefaultAsync(f => f.Id == fileId); var path = Path.Combine(_path, fileId.ToString() + Path.GetExtension(file.Name)); using (var fs = new FileStream(path, FileMode.Append)) { fs.Write(filePart.Content, 0, filePart.Content.Length); } file.PartsUploaded++; await _context.SaveChangesAsync(); var message = await _context.Messages.Include(m => m.Room).FirstOrDefaultAsync(m => m.Id == file.MessageId); var socketMessage = new FileStatusDTO { Id = fileId, MessageId = file.MessageId, PartsUploaded = file.PartsUploaded }; var socketDTO = new SocketResponseDTO <FileStatusDTO> { Type = SocketMessageTypes.FileStatusChanged, Model = socketMessage }; foreach (var p in message.Room.Participants.Select(p => p.UserId)) { await _chatHandler.SendMessageByUserId(p, socketDTO); } return(response); }
public async Task <IEnumerable <FileStatusDTO> > ReadTransactionsFromFiles(CsvFileReaderDTO dto) { IBankEstatementReader reader = _readerResolver.GetBankEstatementReader(BankCode.FromValue <BankCode>(dto.BankCode)); var fileStatusResult = new List <FileStatusDTO>(); foreach (var csv in dto.CsvFiles) { var fileStatus = new FileStatusDTO { FileName = csv.FileName }; try { Validate.IsTrue(csv.ContentType == "text/csv", "Only csv files are accepted"); Validate.IsTrue(csv.Length > 0, $"File {csv.FileName} is empty"); var parsedFile = reader.ProcessBankInformation(csv); fileStatus.TransactionsRead = parsedFile.Transactions.Count; var bankAccount = await GetFilesOwnerBankAccount(dto.FilesOwnerId, parsedFile.AgencyNumber, parsedFile.AccountNumber, dto.BankCode); RemoveExistentTransactions(parsedFile); if (parsedFile.Transactions.Count > 0) { await PersistBankEstatementInformation(parsedFile, bankAccount); } fileStatus.IsSuccessfullRead = true; fileStatus.TransactionsSaved = parsedFile.Transactions.Count; // TODO: Get initial and final date from file fileStatus.InitialDate = parsedFile.Transactions.First().Date; fileStatus.FinalDate = parsedFile.Transactions.Last().Date; } catch (Exception ex) { // TODO: create exception for file and reading cases, and another for database cases _logger.LogWarning("Message: {0}", ex.Message); fileStatus.IsSuccessfullRead = false; } finally { fileStatusResult.Add(fileStatus); } } return(fileStatusResult); }
public async void OnFileStatusChanged(FileStatusDTO fileStatus) { var file = await GetFileAsync(fileStatus.Id); if (file == null) { return; } ChangeData(delegate { var message = Messages.FirstOrDefault(m => m.Id == fileStatus.MessageId); if (message != null) { message.Content = GenerateContent(file); } }); }