Exemple #1
0
        private void ConfigureDomainEvents(IServiceCollection services)
        {
            var eventRegistry = new DomainEventRegistry();

            services.AddSingleton <IDomainEventRegistry>(eventRegistry);


            services.AddSingleton(eventRegistry);
            services.AddTransient <EventHandlerFactory>();
            services.AddTransient <IEventHandler <AWSContextAccountCreatedIntegrationEvent>, AWSContextAccountCreatedEventHandler>();
            services.AddTransient <IEventDispatcher, EventDispatcher>();

            var capabilitiesTopicName       = Configuration["CAPABILITY_SERVICE_KAFKA_TOPIC_CAPABILITY"];
            var capabilitiesTopicsTopicName = Configuration["CAPABILITY_SERVICE_KAFKA_TOPIC_TOPICS"];

            eventRegistry
            .Register <CapabilityCreated>("capability_created", capabilitiesTopicName)
            .Register <CapabilityUpdated>("capability_updated", capabilitiesTopicName)
            .Register <CapabilityDeleted>("capability_deleted", capabilitiesTopicName)
            .Register <MemberJoinedCapability>("member_joined_capability", capabilitiesTopicName)
            .Register <MemberLeftCapability>("member_left_capability", capabilitiesTopicName)
            .Register <ContextAddedToCapability>("context_added_to_capability", capabilitiesTopicName)
            .Register <ContextUpdated>("context_updated", capabilitiesTopicName)
            .Register <AWSContextAccountCreatedIntegrationEvent>("aws_context_account_created",
                                                                 capabilitiesTopicName)
            .Register <TopicCreated>("topic_created", capabilitiesTopicsTopicName)
            .Register <ClusterCreated>("cluster_created", capabilitiesTopicsTopicName);
            var scanner = new DomainEventScanner(eventRegistry);

            scanner.EnsureNoUnregisteredDomainEventsIn(Assembly.GetExecutingAssembly());
        }
Exemple #2
0
        private IDomainEventRegistry <TAggregate> CreateRegistry(IServiceProvider serviceProvider)
        {
            var registry = new DomainEventRegistry <TAggregate>();

            ApplyEventRegisters(registry);
            return(registry);
        }
Exemple #3
0
        private static void ConfigureDomainEvents(IServiceCollection services)
        {
            var eventRegistry = new DomainEventRegistry();

            services.AddSingleton(eventRegistry);
            services.AddTransient <IEventHandler <ContextAccountCreatedDomainEvent>, ContextAccountCreatedDomainEventHandler>();
            services.AddTransient <IEventHandler <CapabilityRegisteredDomainEvent>, CapabilityRegisteredEventHandler>();


            services.AddTransient <KafkaConsumerFactory.KafkaConfiguration>();
            services.AddTransient <KafkaConsumerFactory>();

            var serviceProvider = services.BuildServiceProvider();

            var topic = "build.capabilities";

            eventRegistry.Register <ContextAccountCreatedDomainEvent>(
                eventTypeName: "aws_context_account_created",
                topicName: topic,
                eventHandler: serviceProvider.GetRequiredService <IEventHandler <ContextAccountCreatedDomainEvent> >());

            eventRegistry.Register(
                eventTypeName: "capability_registered",
                topicName: topic,
                eventHandler: serviceProvider.GetRequiredService <IEventHandler <CapabilityRegisteredDomainEvent> >());

            services.AddTransient <IEventDispatcher, EventDispatcher>();
        }
Exemple #4
0
 private void ApplyEventRegisters(DomainEventRegistry <TAggregate> registry)
 {
     foreach (var eventRegister in _eventRegisters)
     {
         eventRegister(registry);
     }
 }
Exemple #5
0
        public async Task Will_Handle_CapabilityRegisteredEvent()
        {
            using (var builder = new HttpClientBuilder())
            {
                var teamCreatedEventHandlerStub = new TeamCreatedEventHandlerStub();

                var eventRegistry = new DomainEventRegistry();
                eventRegistry.Register(
                    eventTypeName: "capability_registered",
                    topicName: "foo",
                    eventHandler: teamCreatedEventHandlerStub);


                var client = builder
                             .WithService <DomainEventRegistry>(eventRegistry)

                             .Build();

                var input = @"{
                                    ""eventName"": ""capability_registered"",
                                    ""version"": ""1"",
                                    ""payload"": {
                                        ""capabilityName"": ""ADFS-ViewOnly"",
                                        ""roleArn"": ""arn:aws:iam::738063116313:role/ADFS-ViewOnly""
                                    }
                                }";

                var response = await client.PostAsync("/api/events", new JsonContent(input));

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                Assert.True(teamCreatedEventHandlerStub.HandleAsyncGotCalled);
            }
        }
        public KafkaConsumerHostedService(
            ILogger <KafkaConsumerHostedService> logger,
            IServiceProvider serviceProvider,
            KafkaConsumerFactory kafkaConsumerFactory,
            DomainEventRegistry domainEventRegistry)
        {
            Console.WriteLine($"Starting event consumer.");

            _logger          = logger;
            _consumerFactory = kafkaConsumerFactory;
            _serviceProvider = serviceProvider;
            _eventRegistry   = domainEventRegistry;
        }
Exemple #7
0
        private static void ConfigureDomainEvents(IServiceCollection services)
        {
            services.AddTransient <IEventHandler <CapabilityCreatedDomainEvent>, SlackCapabilityCreatedDomainEventHandler>();
            services.AddTransient <IEventHandler <CapabilityDeletedDomainEvent>, CapabilityDeletedEventNotifyDedHandler>();
            services.AddTransient <IEventHandler <MemberJoinedCapabilityDomainEvent>, SlackMemberJoinedCapabilityDomainEventHandler>();
            services.AddTransient <IEventHandler <MemberLeftCapabilityDomainEvent>, SlackMemberLeftCapabilityDomainEventHandler>();
            services.AddTransient <IEventHandler <ContextAddedToCapabilityDomainEvent>, SlackContextAddedToCapabilityDomainEventHandler>();
            services.AddTransient <IEventHandler <AWSContextAccountCreatedDomainEvent>, SlackAwsContextAccountCreatedEventHandler>();
            services.AddTransient <IEventHandler <K8sNamespaceCreatedAndAwsArnConnectedDomainEvent>, K8SNamespaceCreatedAndAwsArnConnectedDomainEventHandler>();

            services.AddTransient <EventHandlerFactory>();

            var topic = "build.selfservice.events.capabilities";

            var eventRegistry = new DomainEventRegistry()
                                .Register <CapabilityCreatedDomainEvent>(
                eventName: "capability_created",
                topicName: topic)
                                .Register <CapabilityDeletedDomainEvent>(
                eventName: "capability_deleted",
                topicName: topic)
                                .Register <MemberJoinedCapabilityDomainEvent>(
                eventName: "member_joined_capability",
                topicName: topic)
                                .Register <MemberLeftCapabilityDomainEvent>(
                eventName: "member_left_capability",
                topicName: topic)
                                .Register <ContextAddedToCapabilityDomainEvent>(
                eventName: "context_added_to_capability",
                topicName: topic)
                                .Register <AWSContextAccountCreatedDomainEvent>(
                eventName: "aws_context_account_created",
                topicName: topic)
                                .Register <K8sNamespaceCreatedAndAwsArnConnectedDomainEvent>(
                eventName: "k8s_namespace_created_and_aws_arn_connected",
                topicName: topic);

            services.AddSingleton(eventRegistry);

            services.AddTransient <IEventDispatcher, EventDispatcher>();

            services.AddScoped <ExternalEventMetaDataStore>();
        }
Exemple #8
0
        private static void ConfigureDomainEvents(IServiceCollection services)
        {
            var eventRegistry = new DomainEventRegistry();

            services.AddSingleton <IDomainEventRegistry>(eventRegistry);
            services.AddTransient <KafkaPublisherFactory.KafkaConfiguration>();
            services.AddTransient <KafkaPublisherFactory>();
            services.AddHostedService <PublishingService>();

            var capabilitiesTopicName = "build.capabilities";

            eventRegistry
            .Register <CapabilityCreated>("capability_created", capabilitiesTopicName)
            .Register <MemberJoinedCapability>("member_joined_capability", capabilitiesTopicName)
            .Register <MemberLeftCapability>("member_left_capability", capabilitiesTopicName)
            .Register <ContextAddedToCapability>("context_added_to_capability", capabilitiesTopicName);

            var scanner = new DomainEventScanner(eventRegistry);

            scanner.EnsureNoUnregisteredDomainEventsIn(Assembly.GetExecutingAssembly());
        }
        private static void ConfigureDomainEvents(IServiceCollection services)
        {
            var eventRegistry = new DomainEventRegistry();

            services.AddSingleton(eventRegistry);
            services.AddTransient <IEventHandler <ContextAddedToCapabilityDomainEvent>, ContextAddedToCapabilityEventHandler>();


            services.AddTransient <KafkaConsumerFactory.KafkaConfiguration>();
            services.AddTransient <KafkaConsumerFactory>();

            var serviceProvider = services.BuildServiceProvider();

            eventRegistry
            .Register <ContextAddedToCapabilityDomainEvent>(
                eventTypeName: "context_added_to_capability",
                topicName: "build.capabilities",
                eventHandler: serviceProvider.GetRequiredService <IEventHandler <ContextAddedToCapabilityDomainEvent> >());

            services.AddTransient <IEventDispatcher, EventDispatcher>();
        }
Exemple #10
0
        public void GetAllTopics_given_registered_topics_returns_expected_topics()
        {
            // Arrange
            var topic1 = "build.capabilities";
            var topic2 = "build.dummy";

            var sut = new DomainEventRegistry()
                      .Register <CapabilityCreatedDomainEvent>(
                eventName: "eventDummyName1",
                topicName: topic1)
                      .Register <MemberJoinedCapabilityDomainEvent>(
                eventName: "eventDummyName2",
                topicName: topic2);

            // Act
            var actualTopic = sut.GetAllTopics();

            // Assert
            Assert.Equal(2, actualTopic.Count());
            Assert.Contains(topic1, actualTopic);
            Assert.Contains(topic2, actualTopic);
        }
Exemple #11
0
        public void GetTopicFor_given_non_registered_event_returns_null()
        {
            // Arrange
            var topic = "build.capabilities";

            var sut = new DomainEventRegistry()
                      .Register <CapabilityCreatedDomainEvent>(
                eventName: "capability_created",
                topicName: topic)
                      .Register <MemberJoinedCapabilityDomainEvent>(
                eventName: "member_joined_capability",
                topicName: topic)
                      .Register <MemberLeftCapabilityDomainEvent>(
                eventName: "member_left_capability",
                topicName: topic);

            // Act
            var actualTopic = sut.GetTopicFor("dummyEventType");

            // Assert
            Assert.Null(actualTopic);
        }
Exemple #12
0
        public void GetInstanceTypeFor_given_non_registered_event_throws_expected_exception()
        {
            // Arrange
            var topic         = "build.capabilities";
            var eventTypeName = "dummyEventName";

            var sut = new DomainEventRegistry()
                      .Register <CapabilityCreatedDomainEvent>(
                eventName: "capability_created",
                topicName: topic)
                      .Register <MemberJoinedCapabilityDomainEvent>(
                eventName: "member_joined_capability",
                topicName: topic)
                      .Register <MemberLeftCapabilityDomainEvent>(
                eventName: "member_left_capability",
                topicName: topic);

            // Act and assert
            Exception ex = Assert.Throws <EventTypeNotFoundException>(() => sut.GetInstanceTypeFor(eventTypeName));

            Assert.Contains("Error! Could not determine \"event instance type\"", ex.Message);
        }
Exemple #13
0
        public void GetInstanceTypeFor_given_registered_event_returns_expected_type()
        {
            // Arrange
            var topic         = "build.capabilities";
            var eventTypeName = "capability_created";

            var sut = new DomainEventRegistry()
                      .Register <CapabilityCreatedDomainEvent>(
                eventName: eventTypeName,
                topicName: topic)
                      .Register <MemberJoinedCapabilityDomainEvent>(
                eventName: "member_joined_capability",
                topicName: topic)
                      .Register <MemberLeftCapabilityDomainEvent>(
                eventName: "member_left_capability",
                topicName: topic);

            // Act
            var type = sut.GetInstanceTypeFor(eventTypeName);

            // Assert
            Assert.Equal(typeof(CapabilityCreatedDomainEvent), type);
        }
        private IServiceProvider GetPreconfiguredServiceProvider()
        {
            var          loggerFactory       = new LoggerFactory();
            var          logger              = new Logger <EventDispatcher>(loggerFactory);
            var          domainEventRegistry = new DomainEventRegistry();
            const string topic = "build.capabilities";

            domainEventRegistry.Register <MemberJoinedCapabilityDomainEvent>(
                eventName: "member_joined_capability",
                topicName: topic);

            var eventHandlerFactory = new EventHandlerFactory();

            var serviceProvider = new ServiceCollection()
                                  .AddLogging()
                                  .AddTransient <IEventHandler <MemberJoinedCapabilityDomainEvent>, GenericEventHandler <MemberJoinedCapabilityDomainEvent> >()
                                  .AddTransient <EventHandlerFactory>()
                                  .AddSingleton(domainEventRegistry)
                                  .AddTransient <IEventDispatcher, EventDispatcher>()
                                  .AddTransient <ExternalEventMetaDataStore>()
                                  .BuildServiceProvider();

            return(serviceProvider);
        }
 public EventDispatcherBuilder WithEventRegistry(DomainEventRegistry eventRegistry)
 {
     _eventRegistry = eventRegistry;
     return(this);
 }
 public OutboxBuilder WithRegistry(DomainEventRegistry domainEventRegistry)
 {
     _domainEventRegistry = domainEventRegistry;
     return(this);
 }
 public EventDispatcherBuilder()
 {
     _logger              = new Logger <EventDispatcher>(new NullLoggerFactory());
     _eventRegistry       = new DomainEventRegistry();
     _eventHandlerFactory = new EventHandlerFactory();
 }