import de.juplo.kafka.chat.backend.domain.ChatHome;
import com.fasterxml.jackson.databind.ObjectMapper;
-import de.juplo.kafka.chat.backend.domain.ChatroomFactory;
-import de.juplo.kafka.chat.backend.domain.Message;
-import de.juplo.kafka.chat.backend.persistence.InMemoryChatroomFactory;
-import de.juplo.kafka.chat.backend.persistence.InMemoryPersistenceStrategy;
-import de.juplo.kafka.chat.backend.persistence.LocalJsonFilesStorageStrategy;
+import de.juplo.kafka.chat.backend.domain.ChatHomeService;
+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 java.nio.file.Paths;
import java.time.Clock;
-import java.util.LinkedHashMap;
@Configuration
public class ChatBackendConfiguration
{
@Bean
- public ChatHome chatHome(
- ChatroomFactory chatroomFactory,
- StorageStrategy storageStrategy)
+ public ChatHome chatHome(ChatHomeService chatHomeService)
{
- return new ChatHome(
- storageStrategy.readChatrooms().collectMap(chatroom -> chatroom.getId()).block(),
- chatroomFactory);
+ return new ChatHome(chatHomeService);
}
@Bean
- public StorageStrategy storageStrategy(
- ChatBackendProperties properties,
- ObjectMapper mapper,
- ChatroomFactory chatroomFactory)
- {
- return new LocalJsonFilesStorageStrategy(
- Paths.get(properties.getDatadir()),
- mapper,
- chatroomFactory);
- }
-
- @Bean
- ChatroomFactory chatroomFactory(InMemoryPersistenceStrategy persistenceStrategy)
+ InMemoryChatHomeService chatHomeService(
+ StorageStrategy storageStrategy,
+ Clock clock,
+ ChatBackendProperties properties)
{
- return new InMemoryChatroomFactory(persistenceStrategy);
+ return new InMemoryChatHomeService(
+ storageStrategy.readChatrooms(),
+ clock,
+ properties.getChatroomBufferSize());
}
@Bean
- InMemoryPersistenceStrategy persistenceStrategy()
+ public StorageStrategy storageStrategy(
+ ChatBackendProperties properties,
+ Clock clock,
+ ObjectMapper mapper)
{
- return new InMemoryPersistenceStrategy(new LinkedHashMap<>());
+ return new FilesStorageStrategy(
+ Paths.get(properties.getStorageDirectory()),
+ clock,
+ properties.getChatroomBufferSize(),
+ messageFlux -> new InMemoryChatRoomService(messageFlux),
+ mapper);
}
@Bean