Example #1
0
        public void Base()
        {
            Converts.Repository
            .AddJsonEnumSearchHandler()
            .AddJsonPrimitivesSearchHandler()
            .AddJsonObjectSearchHandler()
            .AddJsonKey()
            .AddJsonTimeSpan();

            CompositeEventFormatter formatter = new CompositeEventFormatter(
                new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory()),
                Factory.Default <JsonCompositeStorage>()
                );
            MockEventStore eventStore = new MockEventStore();

            // Creation of state.
            Order order = new Order(KeyFactory.Create(typeof(Order)));

            order.AddItem(KeyFactory.Create(typeof(T_EventSourcing_ReadModels_Rebuilder)), 2);
            order.AddItem(KeyFactory.Create(typeof(Rebuilder)), 5);
            eventStore.Save(order.Events.Select(e => new EventModel(order.Key, e.Key, formatter.Serialize(e), e.Version)));

            // Rebuilding model.
            Rebuilder        rebuilder = new Rebuilder(eventStore, formatter);
            ReadModelHandler handler   = new ReadModelHandler();

            rebuilder.AddAll(handler);
            rebuilder.RunAsync().Wait();

            Assert.AreEqual(1, handler.Totals.Count);
            Assert.AreEqual(
                order.Events.OfType <OrderTotalRecalculated>().Last().TotalPrice,
                handler.Totals.FirstOrDefault().Value
                );
        }
Example #2
0
        public void SerializeAndDeserializeEventWithEnumerationOfKeys()
        {
            Converts.Repository
            .AddJsonEnumSearchHandler()
            .AddJsonObjectSearchHandler()
            .AddJsonPrimitivesSearchHandler()
            .AddJsonKey()
            .AddJsonTimeSpan();

            IFormatter formatter = new CompositeEventFormatter(
                new ReflectionCompositeTypeProvider(
                    new ReflectionCompositeDelegateFactory(),
                    BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public
                    ),
                new DefaultFactory <JsonCompositeStorage>()
                );

            IKey  orderKey = KeyFactory.Create(typeof(Order));
            Order order    = new Order(orderKey);

            order.AddItem(KeyFactory.Create(typeof(Product)), 4);

            OrderItemSummaryChanged changed = order.Events.OfType <OrderItemSummaryChanged>().First();

            string json = formatter.Serialize(changed);

            changed = formatter.Deserialize <OrderItemSummaryChanged>(json);

            Assert.AreEqual(1, changed.ProductKeys.Count());
        }
Example #3
0
        private void Domain()
        {
            Converts.Repository
            .AddJsonEnumSearchHandler()
            .AddJsonPrimitivesSearchHandler()
            .AddJsonObjectSearchHandler()
            .AddJsonKey()
            .AddJsonTimeSpan()
            .Add(new ColorConverter());

            EventStore      = new EntityEventStore(Factory.Default <EventSourcingContext>());
            eventDispatcher = new PersistentEventDispatcher(new EmptyEventStore());
            eventDispatcher.DispatcherExceptionHandlers.Add(this);
            eventDispatcher.EventExceptionHandlers.Add(this);

            IFactory <ICompositeStorage> compositeStorageFactory = Factory.Default <JsonCompositeStorage>();

            ICompositeTypeProvider typeProvider = new ReflectionCompositeTypeProvider(
                new ReflectionCompositeDelegateFactory(),
                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public
                );

            EventFormatter = new CompositeEventFormatter(typeProvider, compositeStorageFactory);

            OutcomeRepository = new AggregateRootRepository <Outcome>(
                EventStore,
                EventFormatter,
                new ReflectionAggregateRootFactory <Outcome>(),
                eventDispatcher,
                new NoSnapshotProvider(),
                new EmptySnapshotStore()
                );

            CategoryRepository = new AggregateRootRepository <Category>(
                EventStore,
                EventFormatter,
                new ReflectionAggregateRootFactory <Category>(),
                eventDispatcher,
                new NoSnapshotProvider(),
                new EmptySnapshotStore()
                );

            PriceFactory = new PriceFactory("CZK");
            DomainFacade = new DefaultDomainFacade(
                OutcomeRepository,
                CategoryRepository,
                PriceFactory
                );
        }
Example #4
0
        public void SerializeAndDeserializeEventWithMetadata()
        {
            Converts.Repository
            .AddJsonEnumSearchHandler()
            .AddJsonObjectSearchHandler()
            .AddJsonPrimitivesSearchHandler()
            .AddJsonKey()
            .AddJsonTimeSpan();

            IFormatter formatter = new CompositeEventFormatter(
                new ReflectionCompositeTypeProvider(
                    new ReflectionCompositeDelegateFactory(),
                    BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public
                    ),
                new DefaultFactory <JsonCompositeStorage>()
                );

            TimeSpan delay    = TimeSpan.FromSeconds(50);
            string   sourceID = "AbcDef";
            int      value    = 15;

            IKey        orderKey = KeyFactory.Create(typeof(Order));
            Order       order    = new Order(orderKey);
            OrderPlaced payload  = order.Events.OfType <OrderPlaced>().First();
            IKey        key      = payload.Key;

            Envelope <OrderPlaced> envelope = new Envelope <OrderPlaced>(payload)
                                              .AddDelay(delay)
                                              .AddSourceID(sourceID);

            envelope.Metadata.Add("Value", value);

            string json = formatter.Serialize(envelope);

            envelope = formatter.Deserialize <Envelope <OrderPlaced> >(json);

            Assert.AreEqual(delay, envelope.GetDelay());
            Assert.AreEqual(sourceID, envelope.GetSourceID());
            Assert.AreEqual(value, envelope.Metadata.Get <int>("Value"));
            Assert.AreEqual(key, envelope.Body.Key);
            Assert.AreEqual(orderKey, envelope.Body.AggregateKey);
        }
Example #5
0
        private void Domain()
        {
            Converts.Repository
            .AddStringTo <int>(Int32.TryParse)
            .AddStringTo <bool>(Boolean.TryParse)
            .AddEnumSearchHandler(false)
            .AddJsonEnumSearchHandler()
            .AddJsonPrimitivesSearchHandler()
            .AddJsonObjectSearchHandler()
            .AddJsonKey()
            .AddJsonTimeSpan()
            .Add(new ColorConverter())
            .AddToStringSearchHandler();

            EventStore      = new EntityEventStore(ServiceProvider.EventSourcingContextFactory);
            eventDispatcher = new PersistentEventDispatcher(new EmptyEventStore());
            eventDispatcher.DispatcherExceptionHandlers.Add(this);
            eventDispatcher.EventExceptionHandlers.Add(this);

            IFactory <ICompositeStorage> compositeStorageFactory = Factory.Default <JsonCompositeStorage>();

            typeProvider = new ReflectionCompositeTypeProvider(
                new ReflectionCompositeDelegateFactory(),
                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public
                );

            CommandFormatter = new CompositeCommandFormatter(typeProvider, compositeStorageFactory);
            EventFormatter   = new CompositeEventFormatter(typeProvider, compositeStorageFactory, new List <ICompositeFormatterExtender>()
            {
                new UserKeyEventExtender()
            });

            commandDispatcher = new PersistentCommandDispatcher(new SerialCommandDistributor(), new EmptyCommandStore(), CommandFormatter);

            OutcomeRepository = new AggregateRootRepository <Outcome>(
                EventStore,
                EventFormatter,
                new ReflectionAggregateRootFactory <Outcome>(),
                eventDispatcher,
                new NoSnapshotProvider(),
                new EmptySnapshotStore()
                );

            CategoryRepository = new AggregateRootRepository <Category>(
                EventStore,
                EventFormatter,
                new ReflectionAggregateRootFactory <Category>(),
                eventDispatcher,
                new NoSnapshotProvider(),
                new EmptySnapshotStore()
                );

            CurrencyListRepository = new AggregateRootRepository <CurrencyList>(
                EventStore,
                EventFormatter,
                new ReflectionAggregateRootFactory <CurrencyList>(),
                eventDispatcher,
                new NoSnapshotProvider(),
                new EmptySnapshotStore()
                );

            Money.BootstrapTask bootstrapTask = new Money.BootstrapTask(
                commandDispatcher.Handlers,
                Factory.Instance(OutcomeRepository),
                Factory.Instance(CategoryRepository),
                Factory.Instance(CurrencyListRepository)
                );
            bootstrapTask.Initialize();
        }