2bde23612a7c865fb91fdaccc39fd0957dbe88b5
[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.*;
4 import lombok.RequiredArgsConstructor;
5 import lombok.extern.slf4j.Slf4j;
6 import reactor.core.publisher.Flux;
7 import reactor.core.publisher.Mono;
8
9 import java.time.Clock;
10 import java.util.UUID;
11
12
13 @RequiredArgsConstructor
14 @Slf4j
15 public class InMemoryChatRoomFactory implements ChatRoomFactory
16 {
17   private final InMemoryChatHomeService chatHomeService;
18   private final ShardingStrategy shardingStrategy;
19   private final Clock clock;
20   private final int bufferSize;
21
22
23   @Override
24   public Mono<ChatRoomInfo> createChatRoom(UUID id, String name)
25   {
26     log.info("Creating ChatRoom with buffer-size {}", bufferSize);
27     int shard = shardingStrategy.selectShard(id);
28     ChatRoomService service = new InMemoryChatRoomService(Flux.empty());
29     ChatRoom chatRoom = new ChatRoom(id, name, shard, clock, service, bufferSize);
30     chatHomeService.putChatRoom(chatRoom);
31     return Mono.just(chatRoom);
32   }
33 }