1 package de.juplo.kafka.chat.backend;
3 import de.juplo.kafka.chat.backend.domain.ChatHome;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import de.juplo.kafka.chat.backend.domain.ChatroomFactory;
6 import de.juplo.kafka.chat.backend.domain.Message;
7 import de.juplo.kafka.chat.backend.persistence.InMemoryChatroomFactory;
8 import de.juplo.kafka.chat.backend.persistence.InMemoryPersistenceStrategy;
9 import de.juplo.kafka.chat.backend.persistence.LocalJsonFilesStorageStrategy;
10 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
11 import org.springframework.boot.context.properties.EnableConfigurationProperties;
12 import org.springframework.context.annotation.Bean;
13 import org.springframework.context.annotation.Configuration;
15 import java.nio.file.Paths;
16 import java.time.Clock;
17 import java.util.LinkedHashMap;
21 @EnableConfigurationProperties(ChatBackendProperties.class)
22 public class ChatBackendConfiguration
25 public ChatHome chatHome(
26 ChatroomFactory chatroomFactory,
27 StorageStrategy storageStrategy)
30 storageStrategy.readChatrooms().collectMap(chatroom -> chatroom.getId()).block(),
35 public StorageStrategy storageStrategy(
36 ChatBackendProperties properties,
38 ChatroomFactory chatroomFactory)
40 return new LocalJsonFilesStorageStrategy(
41 Paths.get(properties.getDatadir()),
47 ChatroomFactory chatroomFactory(InMemoryPersistenceStrategy persistenceStrategy)
49 return new InMemoryChatroomFactory(persistenceStrategy);
53 InMemoryPersistenceStrategy persistenceStrategy()
55 return new InMemoryPersistenceStrategy(new LinkedHashMap<>());
61 return Clock.systemDefaultZone();