fix: Supressed mongo-autoconfiguration if `FilesStorageStrategy` is active
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / persistence / storage / files / FilesStorageConfiguration.java
1 package de.juplo.kafka.chat.backend.persistence.storage.files;
2
3 import com.fasterxml.jackson.databind.ObjectMapper;
4 import de.juplo.kafka.chat.backend.ChatBackendProperties;
5 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
6 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
7 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
8 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
9 import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration;
10 import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
11 import org.springframework.context.annotation.Bean;
12 import org.springframework.context.annotation.Configuration;
13
14 import java.nio.file.Paths;
15 import java.time.Clock;
16
17
18 @ConditionalOnProperty(
19     prefix = "chat.backend",
20     name = "storage",
21     havingValue = "files",
22     matchIfMissing = true)
23 @Configuration
24 @EnableAutoConfiguration(
25     exclude = {
26         MongoRepositoriesAutoConfiguration.class,
27         MongoAutoConfiguration.class })
28 public class FilesStorageConfiguration
29 {
30   @Bean
31   public StorageStrategy storageStrategy(
32       ChatBackendProperties properties,
33       Clock clock,
34       ObjectMapper mapper)
35   {
36     return new FilesStorageStrategy(
37         Paths.get(properties.getStorageDirectory()),
38         clock,
39         properties.getChatroomBufferSize(),
40         messageFlux -> new InMemoryChatRoomService(messageFlux),
41         mapper);
42   }
43 }