X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fpersistence%2Finmemory%2FSimpleChatHome.java;h=2987dd43852f561c83a955e4444209ef9bf595b4;hb=1a6e2af4b700d92efe20ce5099affc01413c6eaa;hp=11542edd3172b48e8540ee3a2823412cd9eaffdc;hpb=5c2cfba556815cf32950e8918f99e06299dee015;p=demos%2Fkafka%2Fchat diff --git a/src/main/java/de/juplo/kafka/chat/backend/persistence/inmemory/SimpleChatHome.java b/src/main/java/de/juplo/kafka/chat/backend/persistence/inmemory/SimpleChatHome.java index 11542edd..2987dd43 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/persistence/inmemory/SimpleChatHome.java +++ b/src/main/java/de/juplo/kafka/chat/backend/persistence/inmemory/SimpleChatHome.java @@ -1,5 +1,8 @@ -package de.juplo.kafka.chat.backend.domain; +package de.juplo.kafka.chat.backend.persistence.inmemory; +import de.juplo.kafka.chat.backend.domain.ChatHome; +import de.juplo.kafka.chat.backend.domain.ChatRoom; +import de.juplo.kafka.chat.backend.domain.UnknownChatroomException; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -10,34 +13,54 @@ import java.util.*; @Slf4j public class SimpleChatHome implements ChatHome { - private final ChatHomeService service; - private final int shard; + private final Map chatrooms; - public SimpleChatHome(ChatHomeService service, int shard) + + public SimpleChatHome(Flux chatroomFlux) { - log.info("Created SimpleChatHome for shard {}", shard); - this.service = service; - this.shard = shard; + this(chatroomFlux, null); } - public SimpleChatHome(ChatHomeService service) + public SimpleChatHome( + Integer shard, + Flux chatroomFlux) { - this(service, 0); + log.info("Created SimpleChatHome for shard {}", shard); + + this.chatrooms = new HashMap<>(); + chatroomFlux + .filter(chatRoom -> + { + if (shard == null && chatRoom.getShard() == shard) + { + return true; + } + else + { + log.info( + "SimpleChatHome for shard {} ignores not owned chat-room {}", + shard, + chatRoom); + return false; + } + }) + .toStream() + .forEach(chatroom -> chatrooms.put(chatroom.getId(), chatroom)); } @Override public Mono getChatRoom(UUID id) { - return service - .getChatRoom(shard, id) + return Mono + .justOrEmpty(chatrooms.get(id)) .switchIfEmpty(Mono.error(() -> new UnknownChatroomException(id))); } @Override public Flux getChatRooms() { - return service.getChatRooms(shard); + return Flux.fromIterable(chatrooms.values()); } }