public class SnapshotService :ISnapshotService
{
private readonly IEventStoreConnection _eventStoreConnection;
public SnapshotService(IEventStoreConnection eventStoreConnection)
{
_eventStoreConnection = eventStoreConnection;
}
public TAggregate Get<TAggregate>(Guid AggregateId, string streamName, string eventClrTypeHeader)
{
var slice = _eventStoreConnection.ReadStreamEventsBackwardAsync(streamName, StreamPosition.End, 1, false).Result;
//TODO: check for valid slice
return (TAggregate) DeserializeAggregate(slice.Events[0].Event.Metadata, slice.Events[0].Event.Data, eventClrTypeHeader);
}
public void Save<TAggregate>(TAggregate aggregate, string streamName, string eventClrTypeHeader)
{
const int versionNo = 1;
var eventData = CreateEventData(aggregate, eventClrTypeHeader);
_eventStoreConnection.AppendToStreamAsync(streamName, versionNo, eventData);
}
-Arun