1 package de.juplo.kafka.chat.backend.persistence.kafka;
3 import de.juplo.kafka.chat.backend.domain.ChatHome;
4 import de.juplo.kafka.chat.backend.domain.ChatRoom;
5 import de.juplo.kafka.chat.backend.domain.ShardNotOwnedException;
6 import de.juplo.kafka.chat.backend.domain.ShardingStrategy;
7 import lombok.RequiredArgsConstructor;
8 import lombok.extern.slf4j.Slf4j;
9 import reactor.core.publisher.Flux;
10 import reactor.core.publisher.Mono;
15 @RequiredArgsConstructor
17 public class KafkaChatHome implements ChatHome
19 private final ShardingStrategy shardingStrategy;
20 private final ChatMessageChannel chatMessageChanel;
24 public Mono<ChatRoom> getChatRoom(UUID id)
26 int shard = shardingStrategy.selectShard(id);
27 if (chatMessageChanel.isLoadInProgress())
29 throw new LoadInProgressException(shard);
33 return chatMessageChanel.getChatRoom(shard, id);
38 public Flux<ChatRoom> getChatRooms()
40 if (chatMessageChanel.isLoadInProgress())
42 throw new LoadInProgressException();
46 return chatMessageChanel.getChatRooms();