refactor: Refined (simplified) `StorageStrategy`
[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.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
14 import java.nio.file.Paths;
15 import java.time.Clock;
16
17
18 @Configuration
19 @EnableConfigurationProperties(ChatBackendProperties.class)
20 public class ChatBackendConfiguration
21 {
22   @Bean
23   public ChatHome chatHome(ChatHomeService chatHomeService)
24   {
25     return new ChatHome(chatHomeService);
26   }
27
28   @Bean
29   InMemoryChatHomeService chatHomeService(
30       StorageStrategy storageStrategy,
31       Clock clock,
32       ChatBackendProperties properties)
33   {
34     return new InMemoryChatHomeService(
35         storageStrategy.read(),
36         clock,
37         properties.getChatroomBufferSize());
38   }
39
40   @Bean
41   public StorageStrategy storageStrategy(
42       ChatBackendProperties properties,
43       Clock clock,
44       ObjectMapper mapper)
45   {
46     return new FilesStorageStrategy(
47         Paths.get(properties.getStorageDirectory()),
48         clock,
49         properties.getChatroomBufferSize(),
50         messageFlux -> new InMemoryChatRoomService(messageFlux),
51         mapper);
52   }
53
54   @Bean
55   public Clock clock()
56   {
57     return Clock.systemDefaultZone();
58   }
59 }