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