1 package de.juplo.kafka.chat.backend.persistence.storage.files;
3 import com.fasterxml.jackson.databind.ObjectMapper;
4 import de.juplo.kafka.chat.backend.ChatBackendProperties;
5 import de.juplo.kafka.chat.backend.api.ShardingStrategy;
6 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
7 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
8 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
9 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
10 import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration;
11 import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
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;
19 @ConditionalOnProperty(
20 prefix = "chat.backend.inmemory",
21 name = "storage-strategy",
22 havingValue = "files",
23 matchIfMissing = true)
25 @EnableAutoConfiguration(
27 MongoRepositoriesAutoConfiguration.class,
28 MongoAutoConfiguration.class })
29 public class FilesStorageConfiguration
32 public StorageStrategy storageStrategy(
33 ChatBackendProperties properties,
35 ShardingStrategy shardingStrategy,
38 return new FilesStorageStrategy(
39 Paths.get(properties.getInmemory().getStorageDirectory()),
41 properties.getChatroomBufferSize(),
43 messageFlux -> new InMemoryChatRoomService(messageFlux),