/// <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(); } }
private void CheckMessageInDbAction(EventServiceUnit unit, IUnitOfWork unitOfWork, Func <Guid, bool> callback) { if (callback(unit.TargetEntityId)) { unitOfWork.Repository <EventServiceUnit>().Delete(unit); } }