refactor: Removed `ChatHomeFactory`
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / persistence / inmemory / InMemoryServicesConfiguration.java
index 94dd5d8..e40d950 100644 (file)
@@ -3,6 +3,7 @@ package de.juplo.kafka.chat.backend.persistence.inmemory;
 import de.juplo.kafka.chat.backend.ChatBackendProperties;
 import de.juplo.kafka.chat.backend.api.KafkaLikeShardingStrategy;
 import de.juplo.kafka.chat.backend.api.ShardingStrategy;
+import de.juplo.kafka.chat.backend.domain.ChatHome;
 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
@@ -19,6 +20,24 @@ import java.time.Clock;
 @Configuration
 public class InMemoryServicesConfiguration
 {
+  @Bean
+  ChatHome[] chatHomes(
+      ChatBackendProperties properties,
+      InMemoryChatHomeService chatHomeService,
+      StorageStrategy storageStrategy)
+  {
+    ChatHome[] chatHomes = new ChatHome[properties.getInmemory().getNumShards()];
+    storageStrategy
+        .read()
+        .subscribe(chatRoom ->
+        {
+          int shard = chatRoom.getShard();
+          if (chatHomes[shard] == null)
+            chatHomes[shard] = new ChatHome(chatHomeService, shard);
+        });
+    return chatHomes;
+  }
+
   @Bean
   InMemoryChatHomeService chatHomeService(
       ChatBackendProperties properties,
@@ -30,12 +49,6 @@ public class InMemoryServicesConfiguration
         storageStrategy.read());
   }
 
-  @Bean
-  InMemoryChatHomeFactory chatHomeFactory(InMemoryChatHomeService service)
-  {
-    return new InMemoryChatHomeFactory(service);
-  }
-
   @Bean
   InMemoryChatRoomFactory chatRoomFactory(
       ShardingStrategy strategy,