public async Task AppendAsync( IAggregateId aggregateId, IReadOnlyList <IDomainEvent> domainEvents, long expectedVersion) { if (domainEvents.Count > 0) { var connection = await _connectionProvider.GrabConnection(); 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(nameof(results.Status), results.Status.ToString()); } } }
public async Task <IReadOnlyList <IDomainEvent> > AsyncLoadAllEventsFor(IAggregateId aggregateId) { var connection = await _connectionProvider.GrabConnection(); var resolvedEvents = await connection.ReadAllStreamEventsForward(aggregateId.ToStreamName(_eventStoreName)); return(resolvedEvents.Select(e => e.Event.ToDomainEvent()).ToList()); }