X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fdomain%2FChatroom.java;h=c05fda0abf137df3e6ba5079c15b0cfbec392e29;hb=0daa9d1a4d6f6b95ffdb42fcf1350ff26a9166e0;hp=62d33f27800e5fcef3ef569e7ab498676cf77446;hpb=7414187b1d200ee3f837a509d22e55dda3a00d32;p=demos%2Fkafka%2Fchat diff --git a/src/main/java/de/juplo/kafka/chat/backend/domain/Chatroom.java b/src/main/java/de/juplo/kafka/chat/backend/domain/Chatroom.java index 62d33f27..c05fda0a 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/domain/Chatroom.java +++ b/src/main/java/de/juplo/kafka/chat/backend/domain/Chatroom.java @@ -1,8 +1,7 @@ -package de.juplo.kafka.chatroom.domain; +package de.juplo.kafka.chat.backend.domain; import lombok.Getter; import lombok.RequiredArgsConstructor; -import lombok.Value; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -10,7 +9,6 @@ import reactor.core.publisher.Sinks; import java.time.LocalDateTime; import java.util.*; -import java.util.stream.Stream; @RequiredArgsConstructor @@ -21,7 +19,7 @@ public class Chatroom private final UUID id; @Getter private final String name; - private final LinkedHashMap messages = new LinkedHashMap<>(); + private final PersistenceStrategy persistence; private final Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); synchronized public Mono addMessage( @@ -30,41 +28,15 @@ public class Chatroom String user, String text) { - return persistMessage(id, timestamp, user, text) + return persistence + .persistMessage(Message.MessageKey.of(user, id), timestamp, text) .doOnNext(message -> sink.tryEmitNext(message).orThrow()); } - private Mono persistMessage( - Long id, - LocalDateTime timestamp, - String user, - String text) - { - Message message = new Message(id, (long)messages.size(), timestamp, user, text); - - MessageKey key = new MessageKey(user, id); - Message existing = messages.get(key); - if (existing != null) - { - log.info("Message with key {} already exists; {}", key, existing); - if (!message.equals(existing)) - throw new MessageMutationException(message, existing); - return Mono.empty(); - } - - messages.put(key, message); - return Mono - .fromSupplier(() -> message) - .log(); - } public Mono getMessage(String username, Long messageId) { - return Mono.fromSupplier(() -> - { - MessageKey key = MessageKey.of(username, messageId); - return messages.get(key); - }); + return persistence.getMessage(Message.MessageKey.of(username, messageId)); } public Flux listen() @@ -72,19 +44,8 @@ public class Chatroom return sink.asFlux(); } - public Stream getMessages(long firstMessage) - { - return messages - .values() - .stream() - .filter(message -> message.getSerialNumber() >= firstMessage); - } - - - @Value(staticConstructor = "of") - static class MessageKey + public Flux getMessages(long first, long last) { - String username; - Long messageId; + return persistence.getMessages(first, last); } }