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);
            }
        }
Ejemplo n.º 2
0
        // 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);
        }
Ejemplo n.º 3
0
        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]);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }