Exemple #1
0
        public async Task <Nothing> AppendAsync(
            AggregateId aggregateId,
            IReadOnlyList <IDomainEvent> domainEvents,
            long expectedVersion)
        {
            if (domainEvents.Count > 0)
            {
                var connection = await EventStoreConnectionProvider.GrabSingleEventStoreConnectionFor(_connectionString);

                var results = await connection.ConditionalAppendToStreamAsync(
                    aggregateId.ToStreamName(_eventStoreName),
                    expectedVersion,
                    domainEvents.Select(e => e.ToEventData()));

                switch (results.Status)
                {
                case ConditionalWriteStatus.Succeeded:
                    break;

                case ConditionalWriteStatus.VersionMismatch:
                    throw new VersionMismatchException(aggregateId.ToStreamName(_eventStoreName), expectedVersion);

                case ConditionalWriteStatus.StreamDeleted:
                    throw new StreamDeletedException(aggregateId.ToStreamName(_eventStoreName));

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(Nothing.NotAtAll);
        }
Exemple #2
0
        public async Task <IReadOnlyList <IDomainEvent> > AsyncLoadAllEventsFor(AggregateId aggregateId)
        {
            var connection = await EventStoreConnectionProvider.GrabSingleEventStoreConnectionFor(_connectionString);

            var resolvedEvents = await connection.ReadAllStreamEventsForward(aggregateId.ToStreamName(_eventStoreName));

            return(resolvedEvents.Select(e => e.Event.ToDomainEvent()).ToList());
        }
Exemple #3
0
 private void PreventAppendIfExpectedVersionDoesntMatchWithNumberOfPreviouslyAppliedEventsForAggregate(
     AggregateId aggregateId,
     long expectedVersion,
     IReadOnlyList <IDomainEvent> previouslyAppliedEvents)
 {
     if (expectedVersion != previouslyAppliedEvents.Count - 1)
     {
         throw new VersionMismatchException(aggregateId.ToStreamName("Test"), expectedVersion);
     }
 }
Exemple #4
0
 public IEventStoreSubscription SubscribeToAggregateEvents(AggregateId aggregateId, long lastCheckpoint = 0) =>
 EventStoreSubscriptionFrom(aggregateId.ToStreamName(_eventStoreName), lastCheckpoint);