예제 #1
0
        /// <summary>
        /// Публикация события через сервис синхронизации
        /// </summary>
        /// <param name="model"></param>
        private void PublishThroughEventService(TModel model)
        {
            //список Id пользователей, которым адресовано уведомление
            var targetUsersIds = GetTargetUsersIds(model).Distinct().ToList();

            //список Id пользователей, которым не доставлено уведомление
            var usersIdsWhoDidNotReciveNotification = targetUsersIds.ToList();

            //рассылка уведомлений
            foreach (var targetUsersId in targetUsersIds)
            {
                //пользователь получил уведомление?
                if (PublishNotificationForUser(targetUsersId, model))
                {
                    usersIdsWhoDidNotReciveNotification.Remove(targetUsersId);
                }
            }

            //сохранение в базу данных уведомлений, которые не были доставлены адресатам
            if (usersIdsWhoDidNotReciveNotification.Any())
            {
                foreach (var userId in usersIdsWhoDidNotReciveNotification)
                {
                    EventServiceUnit unit = new EventServiceUnit
                    {
                        User                   = UnitOfWork.Repository <User>().GetById(userId),
                        TargetEntityId         = model.Id,
                        EventServiceActionType = this.EventServiceActionType
                    };
                    UnitOfWork.Repository <EventServiceUnit>().Add(unit);
                }

                UnitOfWork.SaveChanges();
            }
        }
예제 #2
0
 private void CheckMessageInDbAction(EventServiceUnit unit, IUnitOfWork unitOfWork, Func <Guid, bool> callback)
 {
     if (callback(unit.TargetEntityId))
     {
         unitOfWork.Repository <EventServiceUnit>().Delete(unit);
     }
 }