refactor: Moved exceptions into package `exceptions` - Aligned Code
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / persistence / StorageStrategy.java
index a337b61..7d0f66d 100644 (file)
@@ -1,15 +1,30 @@
 package de.juplo.kafka.chat.backend.persistence;
 
-import de.juplo.kafka.chat.backend.api.ChatroomTo;
-import de.juplo.kafka.chat.backend.domain.ChatRoom;
+import de.juplo.kafka.chat.backend.domain.ChatHome;
+import de.juplo.kafka.chat.backend.domain.ChatRoomInfo;
 import de.juplo.kafka.chat.backend.domain.Message;
 import reactor.core.publisher.Flux;
 
+import java.util.UUID;
+
 
 public interface StorageStrategy
 {
-  void writeChatrooms(Flux<ChatRoom> chatroomFlux);
-  Flux<ChatRoom> readChatrooms();
-  void writeMessages(ChatroomTo chatroomTo, Flux<Message> messageFlux);
-  Flux<Message> readMessages(ChatroomTo chatroomTo);
+  default void write(ChatHome chatHome)
+  {
+    writeChatRoomInfo(
+        chatHome
+            .getChatRoomInfo()
+            .doOnNext(chatRoomInfo ->
+                writeChatRoomData(
+                    chatRoomInfo.getId(),
+                    chatHome
+                        .getChatRoomData(chatRoomInfo.getId())
+                        .flatMapMany(chatRoomData -> chatRoomData.getMessages()))));
+  }
+
+  void writeChatRoomInfo(Flux<ChatRoomInfo> chatRoomInfoFlux);
+  Flux<ChatRoomInfo> readChatRoomInfo();
+  void writeChatRoomData(UUID chatRoomId, Flux<Message> messageFlux);
+  Flux<Message> readChatRoomData(UUID chatRoomId);
 }