public async Task AddUserNotifications(UserNotificationBulkRequest request)
        {
            IQueryable <User> users = m_context.Users.Where(x => request.UserIds.Any(id => id == x.Id));

            Data.Models.Notification notification = m_mapper.Map <NotificationMessage, Data.Models.Notification>(request.Message);
            if (notification == null)
            {
                throw new NotificationNotFound($"Уведомление не найдено");
            }
            DateTime date = DateTime.UtcNow;

            foreach (User user in users)
            {
                Data.Models.Notification notification2 = new Data.Models.Notification
                {
                    User     = user,
                    Date     = date,
                    IsClosed = false,
                    Type     = NotificationType.Notification,
                    Text     = notification.Text,
                    Title    = notification.Title,
                    Severity = notification.Severity,
                    Creator  = request.Message.Creator
                };
                m_context.Notifications.Add(notification2);
            }
            await m_context.SaveChangesAsync();
        }
Esempio n. 2
0
        public void AddUserNotificationPositive()
        {
            const string title   = "Hello";
            const string text    = "My message";
            const string creator = "Notification";
            User         user    = Context.Users.First();

            UserNotificationBulkRequest request = new UserNotificationBulkRequest
            {
                UserIds = new List <string> {
                    user.Id
                },
                Message = new Logic.Models.NotificationMessage
                {
                    Title    = title,
                    Text     = text,
                    Creator  = creator,
                    Severity = Logic.Models.Enums.Severity.Informational
                }
            };

            m_notificationService.AddUserNotifications(request);

            Data.Models.Notification notification = Context.Notifications.SingleOrDefault(x => x.Title == title);

            Assert.IsNotNull(notification);
            Assert.AreEqual(user.Id, notification.UserId);
            Assert.AreEqual(text, notification.Text);
            Assert.AreEqual(creator, notification.Creator);
            Assert.AreEqual(NotificationType.Notification, notification.Type);
            Assert.AreEqual(false, notification.IsClosed);
        }
        public async Task NotifySubsribers(string theme, string text, Logic.Models.Enums.Severity severity)
        {
            Data.Models.Subscription subscription = await m_context.Subscriptions
                                                    .AsNoTracking()
                                                    .Include(x => x.UserSubscriptions.Where(u => u.IsSubscribed == true))
                                                    .SingleOrDefaultAsync(x => x.Theme == theme);

            if (subscription == null)
            {
                throw new System.Exception();
            }

            NotificationMessage message = new NotificationMessage
            {
                Title    = theme,
                Text     = text,
                Severity = severity
            };

            UserNotificationBulkRequest notificationRequest = new UserNotificationBulkRequest
            {
                UserIds = subscription.UserSubscriptions.Where(x => x.ClientNotificationNeeded == true).Select(x => x.UserId),
                Message = message
            };

            UserNotificationBulkRequest emailRequest = new UserNotificationBulkRequest
            {
                UserIds = subscription.UserSubscriptions.Where(x => x.EmailNotificationNeeded == true).Select(x => x.UserId),
                Message = message
            };

            if (notificationRequest.UserIds.Count() != 0)
            {
                await m_notificationService.AddUserNotifications(notificationRequest);
            }
            if (emailRequest.UserIds.Count() != 0)
            {
                await m_emailNotificationService.SendEmailNotifications(emailRequest);
            }
        }
        public async Task ConsumeAsync(UserNotificationMessage message)
        {
            UserNotificationBulkRequest request = new UserNotificationBulkRequest
            {
                UserIds = new string[] { message.UserId },
                Message = new NotificationMessage
                {
                    Title    = message.Title,
                    Text     = message.Text,
                    Severity = m_mapper.Map <Logic.Models.Enums.Severity>(message.Severity)
                }
            };

            if (message.NotificationType == NotificationType.EmailNotification)
            {
                await m_emailService.SendEmailNotifications(request);
            }
            else if (message.NotificationType == NotificationType.Notification)
            {
                await m_notificationService.AddUserNotifications(request);
            }
        }
Esempio n. 5
0
        public async Task <IActionResult> AddNotifications([FromBody] UserNotificationBulkRequest request)
        {
            await m_service.AddUserNotifications(request);

            return(NoContent());
        }
        public async Task SendEmailNotifications(UserNotificationBulkRequest request)
        {
            IQueryable <User> users = m_context.Users.AsNoTracking().Where(x => request.UserIds.Any(id => id == x.Id));

            await SendEmailForUsers(users, request.Message.Creator, request.Message.Title, request.Message.Text, m_mapper.Map <Data.Models.Enums.Severity>(request.Message.Severity));
        }