Ejemplo n.º 1
0
 public RoadRegistryContext(EventSourcedEntityMap map, IStreamStore store,
                            IRoadNetworkSnapshotReader snapshotReader, JsonSerializerSettings settings, EventMapping mapping)
 {
     RoadNetworks = new RoadNetworks(map, store, snapshotReader, settings, mapping);
     RoadNetworkChangesArchives = new RoadNetworkChangesArchives(map, store, settings, mapping);
     Organizations = new Organizations(map, store, settings, mapping);
 }
 public RoadNetworkChangesArchives(EventSourcedEntityMap map, IStreamStore store, JsonSerializerSettings settings, EventMapping mapping)
 {
     _map      = map ?? throw new ArgumentNullException(nameof(map));
     _store    = store ?? throw new ArgumentNullException(nameof(store));
     _settings = settings ?? throw new ArgumentNullException(nameof(settings));
     _mapping  = mapping ?? throw new ArgumentNullException(nameof(mapping));
 }
Ejemplo n.º 3
0
 public RoadNetworks(EventSourcedEntityMap map, IStreamStore store, IRoadNetworkSnapshotReader snapshotReader,
                     JsonSerializerSettings settings, EventMapping mapping)
 {
     _map            = map ?? throw new ArgumentNullException(nameof(map));
     _store          = store ?? throw new ArgumentNullException(nameof(store));
     _settings       = settings ?? throw new ArgumentNullException(nameof(settings));
     _mapping        = mapping ?? throw new ArgumentNullException(nameof(mapping));
     _snapshotReader = snapshotReader ?? throw new ArgumentNullException(nameof(snapshotReader));
 }
Ejemplo n.º 4
0
        public static ICommandHandlerBuilder <IRoadRegistryContext, TCommand> UseRoadRegistryContext <TCommand>(
            this ICommandHandlerBuilder <TCommand> builder, IStreamStore store, IRoadNetworkSnapshotReader snapshotReader, EventEnricher enricher)
        {
            if (store == null)
            {
                throw new ArgumentNullException(nameof(store));
            }
            if (snapshotReader == null)
            {
                throw new ArgumentNullException(nameof(snapshotReader));
            }
            if (enricher == null)
            {
                throw new ArgumentNullException(nameof(enricher));
            }
            return(builder.Pipe <IRoadRegistryContext>(next => async(message, ct) =>
            {
                var map = new EventSourcedEntityMap();
                var context = new RoadRegistryContext(map, store, snapshotReader, SerializerSettings, EventMapping);

                await next(context, message, ct);

                foreach (var entry in map.Entries)
                {
                    var events = entry.Entity.TakeEvents();
                    if (events.Length != 0)
                    {
                        var messageId = message.MessageId.ToString("N");
                        var version = entry.ExpectedVersion;
                        Array.ForEach(events, @event => enricher(@event));
                        var messages = Array.ConvertAll(
                            events,
                            @event =>
                            new NewStreamMessage(
                                Deterministic.Create(Deterministic.Namespaces.Events,
                                                     $"{messageId}-{version++}"),
                                EventMapping.GetEventName(@event.GetType()),
                                JsonConvert.SerializeObject(@event, SerializerSettings)
                                ));
                        await store.AppendToStream(entry.Stream, entry.ExpectedVersion, messages, ct);
                    }
                }
            }
                                                       ));
        }