feat: Implemented and tested `MongoDbStorageStrategy`
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / ChatBackendConfiguration.java
index 6570862..0cca42d 100644 (file)
@@ -3,12 +3,14 @@ package de.juplo.kafka.chat.backend;
 import de.juplo.kafka.chat.backend.domain.ChatHome;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import de.juplo.kafka.chat.backend.domain.ChatHomeService;
-import de.juplo.kafka.chat.backend.persistence.InMemoryChatHomeService;
-import de.juplo.kafka.chat.backend.persistence.LocalJsonFilesStorageStrategy;
+import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatHomeService;
+import de.juplo.kafka.chat.backend.persistence.storage.files.FilesStorageStrategy;
 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
+import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;
 
 import java.nio.file.Paths;
 import java.time.Clock;
@@ -16,6 +18,7 @@ import java.time.Clock;
 
 @Configuration
 @EnableConfigurationProperties(ChatBackendProperties.class)
+@EnableReactiveMongoRepositories
 public class ChatBackendConfiguration
 {
   @Bean
@@ -31,7 +34,7 @@ public class ChatBackendConfiguration
       ChatBackendProperties properties)
   {
     return new InMemoryChatHomeService(
-        storageStrategy.readChatrooms(),
+        storageStrategy.read(),
         clock,
         properties.getChatroomBufferSize());
   }
@@ -42,10 +45,11 @@ public class ChatBackendConfiguration
       Clock clock,
       ObjectMapper mapper)
   {
-    return new LocalJsonFilesStorageStrategy(
+    return new FilesStorageStrategy(
         Paths.get(properties.getStorageDirectory()),
         clock,
         properties.getChatroomBufferSize(),
+        messageFlux -> new InMemoryChatRoomService(messageFlux),
         mapper);
   }