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.ChatHomeService;
6 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatHomeService;
7 import de.juplo.kafka.chat.backend.persistence.storage.files.FilesStorageStrategy;
8 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
9 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
10 import org.springframework.boot.context.properties.EnableConfigurationProperties;
11 import org.springframework.context.annotation.Bean;
12 import org.springframework.context.annotation.Configuration;
13 import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;
15 import java.nio.file.Paths;
16 import java.time.Clock;
20 @EnableConfigurationProperties(ChatBackendProperties.class)
21 @EnableReactiveMongoRepositories
22 public class ChatBackendConfiguration
25 public ChatHome chatHome(ChatHomeService chatHomeService)
27 return new ChatHome(chatHomeService);
31 InMemoryChatHomeService chatHomeService(
32 StorageStrategy storageStrategy,
34 ChatBackendProperties properties)
36 return new InMemoryChatHomeService(
37 storageStrategy.read(),
39 properties.getChatroomBufferSize());
43 public StorageStrategy storageStrategy(
44 ChatBackendProperties properties,
48 return new FilesStorageStrategy(
49 Paths.get(properties.getStorageDirectory()),
51 properties.getChatroomBufferSize(),
52 messageFlux -> new InMemoryChatRoomService(messageFlux),
59 return Clock.systemDefaultZone();