private void Apply(Entity entity) { if (_idToFilterData.TryGetValue(entity.UniqueIdentifier, out FilterDataT filterData)) { FilterDataT updatedFilterData = new FilterDataT(); if (!updatedFilterData.TrySetFilterData(entity, _refresher.EntityAdmin)) { _idToFilterData.Remove(entity.UniqueIdentifier); var listeners = _listeners.ToArray(); for (int i = 0, c = listeners.Length; i < c; i++) { listeners[i].OnDataUnregistered(filterData); } DataRemovedEvent?.Invoke(entity.UniqueIdentifier, filterData); } else if (!updatedFilterData.Equals(filterData)) { _idToFilterData[entity.UniqueIdentifier] = updatedFilterData; var listeners = _listeners.ToArray(); for (int i = 0, c = listeners.Length; i < c; i++) { listeners[i].OnDataUnregistered(filterData); } DataUpdatedEvent?.Invoke(entity.UniqueIdentifier, updatedFilterData); } } else { filterData = new FilterDataT(); if (filterData.TrySetFilterData(entity, _refresher.EntityAdmin)) { _idToFilterData[entity.UniqueIdentifier] = filterData; var listeners = _listeners.ToArray(); for (int i = 0, c = listeners.Length; i < c; i++) { listeners[i].OnDataRegistered(filterData); } DataAddedEvent?.Invoke(entity.UniqueIdentifier, filterData); } } }
public Task Handle(DataAddedEvent <TrackedEntity> notification, CancellationToken cancellationToken) { foreach (var item in notification.Data.OriginalValues.SelectMany(k => k.Value.Select(s => new { Value = s, k.Key }))) { if (IsOnBlackList(notification.GetType().Name, item.Value.Metadata.ShortName())) { continue; } var f = item.Value.Entry; var primaryKey = item.Value.Metadata.FindPrimaryKey(); var primaryKeys = primaryKey.Properties.ToDictionary(p => p.Name, p => f.Property(p.Name).CurrentValue?.ToString()); var originalItems = item.Value.OriginalValues; var currentValues = item.Value.Entry.CurrentValues.Properties.ToDictionary(p => p.Name, p => f.Property(p.Name).OriginalValue?.ToString()); var log = new EventLog(); log.CreatedAt = DateTime.Now; log.EventUser = userAcessor.Name; log.DataKeysValues = JsonConvert.SerializeObject(primaryKeys); log.EntityType = item.Key; log.EventType = notification.Type; log.OriginalValues = JsonConvert.SerializeObject(originalItems); this.dbContext.Add(log); } return(Task.CompletedTask); }
public void PublishDataAddedEvent() { DataAddedEvent?.Invoke(this, EventArgs.Empty); }