Esempio n. 1
0
 public AggregateProcessor(AggregateMetadata <T> metadata, IValueObjectProcessorFactory valueObjectProcessorFactory, IQuery query, IBulkRepository <T> repository)
 {
     _metadata   = metadata;
     _query      = query;
     _repository = repository;
     _aggregateChangesDetector = new DataChangesDetector <T, T>(_metadata.MapSpecificationProviderForSource, _metadata.MapSpecificationProviderForTarget, _query);
     _valueObjectProcessors    = _metadata.Elements.OfType <IValueObjectMetadataElement>().Select(valueObjectProcessorFactory.Create).ToArray();
 }
Esempio n. 2
0
 public AggregateRoot()
 {
     Metadata = new AggregateMetadata
     {
         AggregateId = String.Empty,
         Exists      = false,
         Version     = 0
     };
 }
Esempio n. 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Event"/> class.
 /// </summary>
 /// <param name="eventLogSequenceNumber">The event log sequence number of this event.</param>
 /// <param name="executionContext">The execution context.</param>
 /// <param name="metadata">The event metadata.</param>
 /// <param name="aggregate">The aggregate metadata.</param>
 /// <param name="eventHorizonMetadata">The event horizon metadata.</param>
 /// <param name="content">The event content.</param>
 public Event(
     ulong eventLogSequenceNumber,
     ExecutionContext executionContext,
     EventMetadata metadata,
     AggregateMetadata aggregate,
     EventHorizonMetadata eventHorizonMetadata,
     BsonDocument content)
 {
     EventLogSequenceNumber = eventLogSequenceNumber;
     ExecutionContext       = executionContext;
     Metadata     = metadata;
     Aggregate    = aggregate;
     EventHorizon = eventHorizonMetadata;
     Content      = content;
 }
Esempio n. 4
0
    /// <inheritdoc />
    public IEnumerable <Events.Event> ToEvents(Commit commit)
    {
        var eventsInCommit          = commit.Events.ToArray();
        var aggregateEventsInCommit = commit.AggregateEvents.ToArray();

        if (eventsInCommit.Length == 0 && aggregateEventsInCommit.Length == 0)
        {
            return(Enumerable.Empty <Events.Event>());
        }

        var eventsToStore        = new List <MongoDB.Events.Event>();
        var eventHorizonMetadata = new EventHorizonMetadata();

        foreach (var committedEvents in eventsInCommit)
        {
            var executionContext  = committedEvents.First().ExecutionContext.ToStoreRepresentation();
            var aggregateMetadata = new AggregateMetadata();
            eventsToStore.AddRange(committedEvents.Select(_ => new Events.Event(
                                                              _.EventLogSequenceNumber,
                                                              executionContext,
                                                              new EventMetadata(
                                                                  _.Occurred.UtcDateTime,
                                                                  _.EventSource,
                                                                  _.Type.Id,
                                                                  _.Type.Generation,
                                                                  _.Public),
                                                              aggregateMetadata,
                                                              eventHorizonMetadata,
                                                              BsonDocument.Parse(_.Content))));
        }
        foreach (var committedEvents in aggregateEventsInCommit)
        {
            var executionContext = committedEvents.First().ExecutionContext.ToStoreRepresentation();
            eventsToStore.AddRange(committedEvents.Select(_ => new Events.Event(
                                                              _.EventLogSequenceNumber,
                                                              executionContext,
                                                              new EventMetadata(
                                                                  _.Occurred.UtcDateTime,
                                                                  _.EventSource,
                                                                  _.Type.Id,
                                                                  _.Type.Generation,
                                                                  _.Public),
                                                              new AggregateMetadata(true, _.AggregateRoot.Id, _.AggregateRoot.Generation, _.AggregateRootVersion),
                                                              eventHorizonMetadata,
                                                              BsonDocument.Parse(_.Content))));
        }
        return(eventsToStore);
    }
Esempio n. 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StreamEvent"/> class.
 /// </summary>
 /// <param name="streamPosition">The position in the stream.</param>
 /// <param name="partition">The partition id.</param>
 /// <param name="executionContext">The execution context.</param>
 /// <param name="metadata">The event metadata.</param>
 /// <param name="aggregate">The aggregate metadata.</param>
 /// <param name="eventHorizonMetadata">The event horizon metadata.</param>
 /// <param name="content">The event content.</param>
 public StreamEvent(
     ulong streamPosition,
     PartitionId partition,
     ExecutionContext executionContext,
     StreamEventMetadata metadata,
     AggregateMetadata aggregate,
     EventHorizonMetadata eventHorizonMetadata,
     BsonDocument content)
 {
     StreamPosition   = streamPosition;
     Partition        = partition;
     ExecutionContext = executionContext;
     Metadata         = metadata;
     Aggregate        = aggregate;
     EventHorizon     = eventHorizonMetadata;
     Content          = content;
 }
Esempio n. 6
0
 private void StoreRevision(IIdentity id, int revision)
 {
     lock (_syncObject)
     {
         if (!_loadedAggregates.ContainsKey(id))
         {
             _loadedAggregates[id] = new AggregateMetadata()
             {
                 Revision = revision, Count = 1
             };
         }
         else
         {
             var meta = _loadedAggregates[id];
             meta.Count++;
             if (meta.Revision < revision)
             {
                 meta.Revision = revision;
             }
         }
     }
 }
 public AggregateDataChangesDetectorFactory(AggregateMetadata <T, TKey> metadata, IEqualityComparerFactory equalityComparerFactory, IQuery query)
 {
     _metadata = metadata;
     _equalityComparerFactory = equalityComparerFactory;
     _query = query;
 }