1 package de.juplo.kafka.chat.backend.storage.mongodb;
3 import de.juplo.kafka.chat.backend.domain.ChatRoomInfo;
4 import de.juplo.kafka.chat.backend.domain.Message;
5 import de.juplo.kafka.chat.backend.implementation.StorageStrategy;
6 import lombok.RequiredArgsConstructor;
7 import lombok.extern.slf4j.Slf4j;
8 import reactor.core.publisher.Flux;
10 import java.util.UUID;
11 import java.util.logging.Level;
14 @RequiredArgsConstructor
16 public class MongoDbStorageStrategy implements StorageStrategy
18 private final ChatRoomRepository chatRoomRepository;
19 private final MessageRepository messageRepository;
20 private final String loggingCategory = MongoDbStorageStrategy.class.getSimpleName();
21 private final Level loggingLevel;
22 private final boolean showOperatorLine;
26 public Flux<ChatRoomInfo> writeChatRoomInfo(Flux<ChatRoomInfo> chatRoomInfoFlux)
28 return chatRoomInfoFlux
33 .map(ChatRoomTo::from)
34 .map(chatRoomRepository::save)
35 .map(ChatRoomTo::toChatRoomInfo);
39 public Flux<ChatRoomInfo> readChatRoomInfo()
42 .fromIterable(chatRoomRepository.findAll())
47 .map(ChatRoomTo::toChatRoomInfo);
51 public Flux<Message> writeChatRoomData(UUID chatRoomId, Flux<Message> messageFlux)
58 .map(message -> MessageTo.from(chatRoomId, message))
59 .map(messageRepository::save)
60 .map(MessageTo::toMessage);
64 public Flux<Message> readChatRoomData(UUID chatRoomId)
67 .fromIterable(messageRepository.findByChatRoomIdOrderBySerialAsc(chatRoomId.toString()))
72 .map(MessageTo::toMessage);