Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
                }
            });
        }