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;
13 @RequiredArgsConstructor
15 public class MongoDbStorageStrategy implements StorageStrategy
17 private final ChatRoomRepository chatRoomRepository;
18 private final MessageRepository messageRepository;
22 public Flux<ChatRoomInfo> writeChatRoomInfo(Flux<ChatRoomInfo> chatRoomInfoFlux)
24 return chatRoomInfoFlux
25 .map(ChatRoomTo::from)
26 .flatMap(chatRoomTo -> chatRoomRepository.save(chatRoomTo))
27 .map(ChatRoomTo::toChatRoomInfo);
31 public Flux<ChatRoomInfo> readChatRoomInfo()
33 return chatRoomRepository
37 UUID chatRoomId = UUID.fromString(chatRoomTo.getId());
38 return new ChatRoomInfo(chatRoomId, chatRoomTo.getName(), null);
43 public Flux<Message> writeChatRoomData(UUID chatRoomId, Flux<Message> messageFlux)
46 .map(message -> MessageTo.from(chatRoomId, message))
47 .flatMap(messageTo -> messageRepository.save(messageTo))
48 .map(MessageTo::toMessage);
52 public Flux<Message> readChatRoomData(UUID chatRoomId)
54 return messageRepository
55 .findByChatRoomIdOrderBySerialAsc(chatRoomId.toString())
56 .map(messageTo -> messageTo.toMessage());