Пример #1
0
 public OrderHandler(IMapper mapper, OrderContext orderContext, EventProvider eventContext, ProjectionProvider projectionContext)
 {
     this.mapper            = mapper;
     this.orderContext      = orderContext;
     this.eventContext      = eventContext;
     this.projectionContext = projectionContext;
 }
Пример #2
0
        public void Customize(EndpointConfiguration endpointConfiguration)
        {
            var transport = endpointConfiguration.UseTransport <RabbitMQTransport>();

            endpointConfiguration.UsePersistence <InMemoryPersistence>();

            var conventions = endpointConfiguration.Conventions();

            conventions.DefiningCommandsAs(type => type.Namespace != null && type.Namespace.Contains("Commands"));
            conventions.DefiningEventsAs(type => type.Namespace != null && type.Namespace.Contains("Events"));

            var mapper = new MappingConfig();

            var projectionContext = new ProjectionProvider();

            endpointConfiguration.RegisterComponents(reg =>
            {
                reg.ConfigureComponent(() => new OrderContext("OrderContext"), DependencyLifecycle.InstancePerCall);
                reg.ConfigureComponent(() => mapper.Mapper, DependencyLifecycle.SingleInstance);
                reg.ConfigureComponent(() => new EventProvider(), DependencyLifecycle.SingleInstance);
                reg.ConfigureComponent(() => projectionContext, DependencyLifecycle.SingleInstance);

                reg.ConfigureComponent <ExecuteEventProcessor>(DependencyLifecycle.SingleInstance);
            });

            var projectionProvider = new CustomProjectionProvider(projectionContext);

            projectionProvider.RunProjections().GetAwaiter().GetResult();

            endpointConfiguration.UseSerialization <JsonSerializer>();
            endpointConfiguration.SendFailedMessagesTo("error");
            endpointConfiguration.AuditProcessedMessagesTo("audit");
        }
        public CustomProjectionProvider(ProjectionProvider projectionContext)
        {
            this.projectionContext = projectionContext;

            ProjectionList = new ProjectionList();

            AddCustomProjections();
        }
        public async Task GetAllStreamsProjectionTest()
        {
            var projectionContext = new ProjectionProvider();

            var data = await projectionContext.GetListOfOrderStreamsAsync();

            Assert.IsNotNull(data);
        }
 public RestoreCommandHandler(OrderHandler orderHandler, ExecuteEventProcessor executeEventProcessor,
                              ProjectionProvider projectionContext, EventProvider eventContext, CustomerHandler customerHandler)
 {
     this.orderHandler          = orderHandler;
     this.executeEventProcessor = executeEventProcessor;
     this.projectionContext     = projectionContext;
     this.eventContext          = eventContext;
     this.customerHandler       = customerHandler;
 }
        public async Task GetByQueryTest()
        {
            var projectionName = "Order c0c8b62c-607e-4298-824c-1a73f7361f75";

            var projectionManager = new ProjectionProvider();

            var state = await projectionManager.GetStateAsync(projectionName);

            Assert.IsNotNull(state);
        }
Пример #7
0
        private static void Main()
        {
            Console.Title = "Server";

            var instance = ServerInstance.Initialize().GetAwaiter().GetResult();

            Console.WriteLine("Start workinkg server . . . ");
            Console.WriteLine("Waiting messages . . . ");

            var projectionContext = new ProjectionProvider();

            var customerProducer = new CustomerProducer(projectionContext, instance);

            while (true)
            {
                var line = Console.ReadLine();

                if (line == null)
                {
                    continue;
                }

                if (line == "exit")
                {
                    break;
                }

                if (line.Contains("check-out"))
                {
                    var commandItems = line.Split(' ');

                    var orderId = Guid.Parse(commandItems[1]);

                    instance.Send(new CheckOutOrderCommand
                    {
                        OrderId = orderId
                    }).GetAwaiter().GetResult();
                }
                else if (line == "order-processor-restore")
                {
                    instance.Send(new RestoreOrderProcessorCommand()).GetAwaiter().GetResult();
                }
                else if (line == "propagate-customers")
                {
                    customerProducer.PropagateCustomersFromStoreAsync().GetAwaiter().GetResult();
                }
            }

            instance.Stop().GetAwaiter().GetResult();
        }
Пример #8
0
        public OrderHandlerTests()
        {
            eventContext = new EventProvider();

            var mockOrderContext = new MockedDbContext <OrderContext>();

            projectionContext = new ProjectionProvider();

            mockOrderContext.MockTables();

            orderContext = mockOrderContext.Object;

            var mappingConfig = new MappingConfig();

            orderHandler      = new OrderHandler(mappingConfig.Mapper, mockOrderContext.Object, eventContext, projectionContext);
            mappingTestConfig = new MappingTestConfig();
        }
        public async Task CreateProjectionTest()
        {
            var projectionManager = new ProjectionProvider();

            var name = "Order c0c8b62c-607e-4298-824c-1a73f7361f75";

            var projectionQuery = @"fromStream('Order c0c8b62c-607e-4298-824c-1a73f7361f75')
                            .when({
                                $init:function(){
                                    return {
                                        events: []
                                    };
                                },
                                $any: function(state, event){
                                    
                                    var metadata = JSON.parse(event.metadataRaw);
                                    var timeStamp = metadata.TimeStamp;
                                    
                                    if(Date.parse(timeStamp) >= Date.parse('2017-12-15 18:20:36')){
                                        var data = {
                                            eventType : event.eventType,
                                            eventData : event,
                                            timeStamp : timeStamp
                                        };
            
                                        state.events.push(data);
                                    }
                                }
                            });";

            await projectionManager.CreateContinuousAsync(name, projectionQuery);

            await projectionManager.EnableAsync(name);

            var query = projectionManager.GetQueryAsync(name);

            Assert.IsNotNull(query);
            Assert.AreEqual(query, projectionQuery);
        }
Пример #10
0
 public CustomerProducer(ProjectionProvider projectionContext, IMessageSession messageSession)
 {
     this.projectionContext = projectionContext;
     this.messageSession    = messageSession;
 }