88947a04db1d29aa91fee1e392a32cfdadc8377e
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / persistence / kafka / KafkaChatHome.java
1 package de.juplo.kafka.chat.backend.persistence.kafka;
2
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;
11
12 import java.util.*;
13
14
15 @RequiredArgsConstructor
16 @Slf4j
17 public class KafkaChatHome implements ChatHome
18 {
19   private final ShardingStrategy shardingStrategy;
20   private final ChatMessageChannel chatMessageChanel;
21
22
23   @Override
24   public Mono<ChatRoom> getChatRoom(UUID id)
25   {
26     int shard = shardingStrategy.selectShard(id);
27     if (chatMessageChanel.isLoadInProgress())
28     {
29       throw new LoadInProgressException(shard);
30     }
31     else
32     {
33       return chatMessageChanel.getChatRoom(shard, id);
34     }
35   }
36
37   @Override
38   public Flux<ChatRoom> getChatRooms()
39   {
40     if (chatMessageChanel.isLoadInProgress())
41     {
42       throw new LoadInProgressException();
43     }
44     else
45     {
46       return chatMessageChanel.getChatRooms();
47     }
48   }
49 }