7fff359ccebd36e293b3e4d0c4285e96413b1a81
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / persistence / inmemory / InMemoryChatRoomFactory.java
1 package de.juplo.kafka.chat.backend.persistence.inmemory;
2
3 import de.juplo.kafka.chat.backend.domain.ShardingStrategy;
4 import de.juplo.kafka.chat.backend.domain.ChatRoom;
5 import de.juplo.kafka.chat.backend.domain.ChatRoomFactory;
6 import de.juplo.kafka.chat.backend.domain.ChatRoomService;
7 import lombok.RequiredArgsConstructor;
8 import lombok.extern.slf4j.Slf4j;
9 import reactor.core.publisher.Flux;
10 import reactor.core.publisher.Mono;
11
12 import java.time.Clock;
13 import java.util.UUID;
14
15
16 @RequiredArgsConstructor
17 @Slf4j
18 public class InMemoryChatRoomFactory implements ChatRoomFactory
19 {
20   private final ShardingStrategy shardingStrategy;
21   private final Clock clock;
22   private final int bufferSize;
23
24
25   @Override
26   public Mono<ChatRoom> createChatRoom(UUID id, String name)
27   {
28     log.info("Creating ChatRoom with buffer-size {}", bufferSize);
29     int shard = shardingStrategy.selectShard(id);
30     ChatRoomService service = new InMemoryChatRoomService(Flux.empty());
31     return Mono.just(new ChatRoom(id, name, shard, clock, service, bufferSize));
32   }
33 }