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.ShardingStrategy;
6 import de.juplo.kafka.chat.backend.implementation.StorageStrategy;
7 import lombok.RequiredArgsConstructor;
8 import lombok.extern.slf4j.Slf4j;
9 import reactor.core.publisher.Flux;
11 import java.util.UUID;
14 @RequiredArgsConstructor
16 public class MongoDbStorageStrategy implements StorageStrategy
18 private final ChatRoomRepository chatRoomRepository;
19 private final MessageRepository messageRepository;
20 private final ShardingStrategy shardingStrategy;
24 public void writeChatRoomInfo(Flux<ChatRoomInfo> chatRoomInfoFlux)
27 .map(ChatRoomTo::from)
28 .subscribe(chatroomTo -> chatRoomRepository.save(chatroomTo));
32 public Flux<ChatRoomInfo> readChatRoomInfo()
35 .fromIterable(chatRoomRepository.findAll())
38 UUID chatRoomId = UUID.fromString(chatRoomTo.getId());
39 return new ChatRoomInfo(chatRoomId, chatRoomTo.getName(), null);
44 public void writeChatRoomData(
46 Flux<Message> messageFlux,
47 SuccessCallback successCallback,
48 FailureCallback failureCallback)
51 .map(message -> MessageTo.from(chatRoomId, message))
52 .doOnComplete(() -> successCallback.accept(chatRoomId))
53 .doOnError(throwable -> failureCallback.accept(chatRoomId, throwable))
54 .subscribe(messageTo -> messageRepository.save(messageTo));
58 public Flux<Message> readChatRoomData(UUID chatRoomId)
61 .fromIterable(messageRepository.findByChatRoomIdOrderBySerialAsc(chatRoomId.toString()))
62 .map(messageTo -> messageTo.toMessage());