1 package de.juplo.kafka.chat.backend.persistence.inmemory;
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.UnknownChatroomException;
6 import lombok.extern.slf4j.Slf4j;
7 import reactor.core.publisher.Flux;
8 import reactor.core.publisher.Mono;
14 public class SimpleChatHome implements ChatHome
16 private final Map<UUID, ChatRoom> chatrooms;
20 public SimpleChatHome(Flux<ChatRoom> chatroomFlux)
22 this(chatroomFlux, null);
25 public SimpleChatHome(
27 Flux<ChatRoom> chatroomFlux)
29 log.info("Created SimpleChatHome for shard {}", shard);
31 this.chatrooms = new HashMap<>();
35 if (shard == null && chatRoom.getShard() == shard)
42 "SimpleChatHome for shard {} ignores not owned chat-room {}",
49 .forEach(chatroom -> chatrooms.put(chatroom.getId(), chatroom));
54 public Mono<ChatRoom> getChatRoom(UUID id)
57 .justOrEmpty(chatrooms.get(id))
58 .switchIfEmpty(Mono.error(() -> new UnknownChatroomException(id)));
62 public Flux<ChatRoom> getChatRooms()
64 return Flux.fromIterable(chatrooms.values());