public void Execute(PersistSnapshotCommand <TSnapshot> command)
        {
            if (command.ProducedEventCount < _persistSnapshotPeriod)
            {
                return;
            }

            var snapshotMetadata = new SnapshotMetadata(command.PreviouslyDispatchedCommandIds);
            var snapshotEnvelope = new SnapshotEnvelope <TSnapshot>(command.Snapshot, snapshotMetadata);

            _snapshotDataContext.Persist(snapshotEnvelope);
        }
        private void Persist(TAggregate aggregate)
        {
            var uncommitedEvents = aggregate.GetUncommitedEvents();
            var snapshot         = aggregate.GetSnapshot();
            var originalVersion  = aggregate.Version - uncommitedEvents.Count;
            var persistEvents    = new PersistEventsCommand <TIdentity>(aggregate.Id, uncommitedEvents, _processingCommandId, originalVersion);
            var persistSnapshot  = new PersistSnapshotCommand <TSnapshot>(snapshot, _previouslyDispatchedMessages, uncommitedEvents.Count);
            var publishEvents    = new PublishEventsCommand(uncommitedEvents);

            CommandComposition
            .StartWith(persistEvents)
            .ContinueWith(persistSnapshot)
            .ContinueWith(publishEvents)
            .Run();
        }
Esempio n. 3
0
        public void Execute(Envelope <C> command)
        {
            var messsageId   = Guid.NewGuid();
            var newAggregate = new Aggregate(command.Body.Identity);

            newAggregate.SetName(command.Body.Name);

            var persistEvents   = new PersistEventsCommand <AggregateIdentity>(newAggregate.Id, newAggregate.GetUncommitedEvents(), command.MessageId);
            var persistSnapshot = new PersistSnapshotCommand <AggregateSnapshot>(newAggregate.GetSnapshot(), Enumerable.Empty <Guid>().ToList(), 1);
            var publishEvents   = new PublishEventsCommand(newAggregate.GetUncommitedEvents());

            _commandComposition
            .StartWith(persistEvents)
            .ContinueWith(persistSnapshot)
            .ContinueWith(publishEvents)
            .Run();
        }