fix: `ChatBackendApplicationTest` cannot corrupt the real data anymore
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / ChatBackendConfiguration.java
1 package de.juplo.kafka.chat.backend;
2
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.InMemoryChatHomeService;
7 import de.juplo.kafka.chat.backend.persistence.LocalJsonFilesStorageStrategy;
8 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
9 import org.springframework.boot.context.properties.EnableConfigurationProperties;
10 import org.springframework.context.annotation.Bean;
11 import org.springframework.context.annotation.Configuration;
12
13 import java.nio.file.Paths;
14 import java.time.Clock;
15
16
17 @Configuration
18 @EnableConfigurationProperties(ChatBackendProperties.class)
19 public class ChatBackendConfiguration
20 {
21   @Bean
22   public ChatHome chatHome(ChatHomeService chatHomeService)
23   {
24     return new ChatHome(chatHomeService);
25   }
26
27   @Bean
28   InMemoryChatHomeService chatHomeService(
29       StorageStrategy storageStrategy,
30       Clock clock,
31       ChatBackendProperties properties)
32   {
33     return new InMemoryChatHomeService(
34         storageStrategy.readChatrooms(),
35         clock,
36         properties.getChatroomBufferSize());
37   }
38
39   @Bean
40   public StorageStrategy storageStrategy(
41       ChatBackendProperties properties,
42       Clock clock,
43       ObjectMapper mapper)
44   {
45     return new LocalJsonFilesStorageStrategy(
46         Paths.get(properties.getStorageDirectory()),
47         clock,
48         properties.getChatroomBufferSize(),
49         mapper);
50   }
51
52   @Bean
53   public Clock clock()
54   {
55     return Clock.systemDefaultZone();
56   }
57 }