1 package de.juplo.kafka.chat.backend.persistence.inmemory;
3 import de.juplo.kafka.chat.backend.domain.ChatRoom;
4 import de.juplo.kafka.chat.backend.domain.ChatHomeService;
5 import lombok.extern.slf4j.Slf4j;
6 import reactor.core.publisher.Flux;
7 import reactor.core.publisher.Mono;
9 import java.time.Clock;
10 import java.util.HashMap;
11 import java.util.LinkedHashMap;
13 import java.util.UUID;
17 public class InMemoryChatHomeService implements ChatHomeService<InMemoryChatRoomService>
19 private final Map<UUID, ChatRoom> chatrooms;
20 private final Clock clock;
21 private final int bufferSize;
24 public InMemoryChatHomeService(
25 Flux<ChatRoom> chatroomFlux,
29 log.debug("Creating InMemoryChatHomeService with buffer-size {} (for created ChatRoom's)", bufferSize);
30 this.chatrooms = new HashMap<>();
31 chatroomFlux.toStream().forEach(chatroom -> chatrooms.put(chatroom.getId(), chatroom));
33 this.bufferSize = bufferSize;
37 public Mono<ChatRoom> createChatRoom(UUID id, String name)
39 InMemoryChatRoomService service =
40 new InMemoryChatRoomService(new LinkedHashMap<>());
41 ChatRoom chatRoom = new ChatRoom(id, name, clock, service, bufferSize);
42 chatrooms.put(chatRoom.getId(), chatRoom);
43 return Mono.just(chatRoom);
47 public Mono<ChatRoom> getChatRoom(UUID id)
49 return Mono.justOrEmpty(chatrooms.get(id));
53 public Flux<ChatRoom> getChatRooms()
55 return Flux.fromStream(chatrooms.values().stream());