import de.juplo.kafka.chat.backend.domain.ChatHomeService;
import de.juplo.kafka.chat.backend.domain.ChatRoomInfo;
import de.juplo.kafka.chat.backend.domain.Message;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import reactor.core.publisher.Flux;
import java.util.UUID;
public interface StorageStrategy
{
- default void write(ChatHomeService chatHomeService)
+ Logger log = LoggerFactory.getLogger(StorageStrategy.class.getCanonicalName());
+
+ default Flux<ChatRoomInfo> write(ChatHomeService chatHomeService)
{
- writeChatRoomInfo(
+ return writeChatRoomInfo(
chatHomeService
.getChatRoomInfo()
.doOnNext(chatRoomInfo -> writeChatRoomData(
chatRoomInfo.getId(),
chatHomeService
.getChatRoomData(chatRoomInfo.getId())
- .flatMapMany(chatRoomData -> chatRoomData.getMessages()))));
+ .flatMapMany(chatRoomData -> chatRoomData.getMessages())
+ )
+ .doOnComplete(() -> log.info("Stored {}", chatRoomInfo))
+ .doOnError(throwable -> log.error("Could not store {}: {}", chatRoomInfo, throwable))
+ .subscribe())
+ )
+ .doOnComplete(() -> log.info("Stored {}", chatHomeService))
+ .doOnError(throwable -> log.error("Could not store {}: {}", chatHomeService, throwable));
}
- void writeChatRoomInfo(Flux<ChatRoomInfo> chatRoomInfoFlux);
+ Flux<ChatRoomInfo> writeChatRoomInfo(Flux<ChatRoomInfo> chatRoomInfoFlux);
Flux<ChatRoomInfo> readChatRoomInfo();
- void writeChatRoomData(UUID chatRoomId, Flux<Message> messageFlux);
+ Flux<Message> writeChatRoomData(UUID chatRoomId, Flux<Message> messageFlux);
Flux<Message> readChatRoomData(UUID chatRoomId);
}