public override TResult GetById <TResult>(string id) { try { var streamName = AggregateToStreamName(typeof(TResult), id); var streamEvents = new List <ResolvedEvent>(); StreamEventsSlice currentSlice; long nextSliceStart = StreamPosition.Start; do { currentSlice = _connection.ReadStreamEventsForwardAsync(streamName, nextSliceStart, eventReadLimitCount, false).Result; nextSliceStart = currentSlice.NextEventNumber; streamEvents.AddRange(currentSlice.Events); } while (!currentSlice.IsEndOfStream && currentSlice.Events.Length > 0); if (currentSlice.Status == SliceReadStatus.StreamNotFound) { throw new AggregateNotFoundException("Could not found aggregate of type " + typeof(TResult) + " and id " + id); } IEnumerable <IDomainEvent> deserializedEvents = currentSlice.Events.Select(e => { var metadata = EventSerialization.DeserializeObject <Dictionary <string, string> >(e.OriginalEvent.Metadata); var eventData = EventSerialization.DeserializeObject(e.OriginalEvent.Data, metadata[_customiseEventData.EventClrTypeHeader]); return(eventData as IDomainEvent); }); return(BuildAggregate <TResult>(deserializedEvents)); } catch (System.Exception ex) { throw new RepositoryException("Unable to retrieve from eventStore", ex); } }
// TODO: wire up the ASP.NET Core custom deserialization instead of handling it myself? public async Task Save() { using StreamReader reader = new StreamReader(Request.Body); string serializedEvents = await reader.ReadToEndAsync(); List <IEvent> deserialized = await EventSerialization.DeserializeListAsync(serializedEvents); _eventRepo.Save(deserialized); }
public void Serialize() { var e = new TestEvent { Foo = "Hello!" }; var result = EventSerialization.Serialize(e).Split('\n'); Assert.StartsWith("nsimpleeventstore.tests.EventSerialization_tests+TestEvent", result[0]); Assert.StartsWith("{\"Foo\":\"Hello!\",\"Id\":\"", result[1]); }
public void Deserialize() { var e = new TestEvent { Foo = "Hello!" }; var serialized = EventSerialization.Serialize(e); var result = (TestEvent)EventSerialization.Deserialize(serialized); Assert.NotSame(e, result); Assert.Equal(e.Id, result.Id); Assert.Equal(e.Foo, result.Foo); }
public async Task CanSaveAndRetrieveSingleEvent() { List <string> serialized = await _serverCaller.PullAllSerializedEventsAsync(); Assert.Empty(serialized); SimpleTextAggregate agg = new SimpleTextAggregate("foo"); IEvent @event = agg.GetUncommittedEvents().Single(); await _serverCaller.PushEventAsync(@event); serialized = await _serverCaller.PullAllSerializedEventsAsync(); IEvent deserializedEvent = await EventSerialization.DeserializeAsync(serialized.Single()); AssertEventsAreEqual(@event, deserializedEvent); }
public void EventSerialization_acceptance_test() { var myEvent = new MyEvent { Item = new ConcreteClass { Number = 2, }, }; EventSerialization.JsonSerializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto, }; var serializationResult = EventSerialization.Serialize(myEvent); var deserializationResult = EventSerialization.Deserialize(serializationResult); Assert.IsType <ConcreteClass>(((MyEvent)deserializationResult).Item); }
public void CreateEventAdapterTest() { string aggregateId = "Box"; int aggregateVersion = 2; string aggregateType = typeof(Location).FullName; string commandId = Guid.NewGuid().ToString(); string correlationId = commandId; LocationCreated locationCreatedEvent = new LocationCreated(aggregateId, string.Empty); string jsonEvent = new EventSerialization().SerializeEvent(locationCreatedEvent); var eventAdapter = new EventSerialization().DeserializeEvent(aggregateId, aggregateVersion, aggregateType, commandId, correlationId, jsonEvent); Assert.IsInstanceOfType(eventAdapter, typeof(IEvent)); Assert.IsInstanceOfType(eventAdapter, typeof(IEvent <LocationCreated>)); }
public void DeserializedEventAdapterAsFulyTypedTest() { string aggregateId = "Box"; int aggregateVersion = 2; string aggregateType = typeof(Location).FullName; string commandId = Guid.NewGuid().ToString(); string correlationId = commandId; var locationCreated = new LocationCreated(aggregateId, string.Empty); string serializedLocationCreated = new EventSerialization().SerializeEvent(locationCreated); var eventAdapter = new EventSerialization().DeserializeEvent(aggregateId, aggregateVersion, aggregateType, commandId, correlationId, serializedLocationCreated); var fullyTypedEventAdapter = eventAdapter.AsFullyTypedEvent(eventAdapter.EventBody); Assert.IsInstanceOfType(fullyTypedEventAdapter, typeof(IEvent <LocationCreated>)); }
public Event Load(long index) { var text = File.ReadAllText(FilepathFor(index)); return(EventSerialization.Deserialize(text)); }
public void Store(long index, Event e) { var text = EventSerialization.Serialize(e); Store(index, text); }