public async Task <IList <IDomainEvent> > GetEventsBySnapshotStreamId(SnapshotEventStreamId snapshotEventStreamId) { var readSlice = await _connection.ReadStreamEventsBackwardAsync( stream : snapshotEventStreamId.SnapshotStreamName, start : StreamPosition.End, count : 1, resolveLinkTos : false); var streamEvents = new List <IDomainEvent>(); if (readSlice.Status != SliceReadStatus.Success) { return(await GetEventsFromStreamVersion(snapshotEventStreamId.StreamName, MinStreamVersion, snapshotEventStreamId.ResolveLinks)); } else { var snapShotEvent = readSlice.Events[0]; var dataAsJson = Encoding.UTF8.GetString(snapShotEvent.Event.Data); var snapShot = JsonConvert.DeserializeObject <Snapshot>(dataAsJson); streamEvents.Add(ConvertEventDataToDomainEvent(snapShotEvent)); var events = await GetEventsFromStreamVersion(snapshotEventStreamId.StreamName, snapShot.SnapshotStreamVersion, snapshotEventStreamId.ResolveLinks); streamEvents.AddRange(events); return(streamEvents); } }
public async Task <StreamWriteResult> SaveSnapshot(SnapshotEventStreamId snapshotEventStreamId, IDomainEvent snapshot) { var result = await _connection.AppendToStreamAsync( snapshotEventStreamId.SnapshotStreamName, ExpectedVersion.Any, new[] { ToEventData(Guid.NewGuid(), snapshot) }); return(new StreamWriteResult(result.NextExpectedVersion)); }