Esempio n. 1
0
        public async Task Process(Guid senderId, Guid receiverId, string subjectText, string messageText)
        {
            var handledMessages = new List <HandledMessage>();

            // Create and save message
            var message = new Message
            {
                Created    = DateTimeOffset.Now,
                ReceiverId = receiverId,
                SenderId   = senderId,
                Subject    = subjectText,
                Text       = messageText
            };

            await _messageDbContext.AddAsync(message);

            await _messageDbContext.SaveChangesAsync();

            // Call handlers
            var preferedMessageTypes = await _messageDbContext.PreferedMessageTypes.Where(m => m.IdentityId == receiverId).ToListAsync();

            foreach (var messageHandler in _messageHandlerFactory.CreateHandlers())
            {
                if (!preferedMessageTypes.Any() ||
                    preferedMessageTypes.Any(mt => mt.Type == messageHandler.Type))
                {
                    var messageResult = await messageHandler.HandledMessage(message);

                    handledMessages.Add(new HandledMessage
                    {
                        MessageId = message.Id,
                        Sent      = messageResult.Sent,
                        Type      = messageHandler.Type
                    });
                }
            }

            // Save result
            await _messageDbContext.AddRangeAsync(handledMessages);

            await _messageDbContext.SaveChangesAsync();
        }