X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fpersistence%2Fstorage%2Fmongodb%2FMongoDbStorageStrategy.java;h=bc821e6db6a870be143082761dce12d8499a24ac;hb=6b5b504d92c91dd838db43735cea5e23740c29cb;hp=08ed93b067552b1c180622814b3b67c2254410d6;hpb=009435373fa6adf7ec9e375ef71a545c8c8f010d;p=demos%2Fkafka%2Fchat diff --git a/src/main/java/de/juplo/kafka/chat/backend/persistence/storage/mongodb/MongoDbStorageStrategy.java b/src/main/java/de/juplo/kafka/chat/backend/persistence/storage/mongodb/MongoDbStorageStrategy.java index 08ed93b0..bc821e6d 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/persistence/storage/mongodb/MongoDbStorageStrategy.java +++ b/src/main/java/de/juplo/kafka/chat/backend/persistence/storage/mongodb/MongoDbStorageStrategy.java @@ -1,13 +1,13 @@ package de.juplo.kafka.chat.backend.persistence.storage.mongodb; -import de.juplo.kafka.chat.backend.domain.ChatRoom; +import de.juplo.kafka.chat.backend.domain.ChatRoomInfo; +import de.juplo.kafka.chat.backend.domain.Message; +import de.juplo.kafka.chat.backend.persistence.inmemory.ShardingStrategy; import de.juplo.kafka.chat.backend.persistence.StorageStrategy; -import de.juplo.kafka.chat.backend.persistence.storage.files.ChatRoomServiceFactory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Flux; -import java.time.Clock; import java.util.UUID; @@ -15,33 +15,55 @@ import java.util.UUID; @Slf4j public class MongoDbStorageStrategy implements StorageStrategy { - private final ChatRoomRepository repository; - private final Clock clock; - private final int bufferSize; - private final ChatRoomServiceFactory factory; + private final ChatRoomRepository chatRoomRepository; + private final MessageRepository messageRepository; + private final ShardingStrategy shardingStrategy; @Override - public void write(Flux chatroomFlux) + public void writeChatRoomInfo(Flux chatRoomInfoFlux) { - chatroomFlux + chatRoomInfoFlux .map(ChatRoomTo::from) - .subscribe(chatroomTo -> repository.save(chatroomTo)); + .subscribe(chatroomTo -> chatRoomRepository.save(chatroomTo)); } @Override - public Flux read() + public Flux readChatRoomInfo() { return Flux - .fromIterable(repository.findAll()) - .map(chatRoomTo -> new ChatRoom( - UUID.fromString(chatRoomTo.getId()), - chatRoomTo.getName(), - clock, - factory.create( - Flux - .fromIterable(chatRoomTo.getMessages()) - .map(messageTo -> messageTo.toMessage())), - bufferSize)); + .fromIterable(chatRoomRepository.findAll()) + .map(chatRoomTo -> + { + UUID chatRoomId = UUID.fromString(chatRoomTo.getId()); + int shard = shardingStrategy.selectShard(chatRoomId); + + log.info( + "{} - old shard: {}, new shard: {}", + chatRoomId, + chatRoomTo.getShard(), + shard); + + return new ChatRoomInfo( + chatRoomId, + chatRoomTo.getName(), + shard); + }); + } + + @Override + public void writeChatRoomData(UUID chatRoomId, Flux messageFlux) + { + messageFlux + .map(message -> MessageTo.from(chatRoomId, message)) + .subscribe(messageTo -> messageRepository.save(messageTo)); + } + + @Override + public Flux readChatRoomData(UUID chatRoomId) + { + return Flux + .fromIterable(messageRepository.findByChatRoomIdOrderBySerialAsc(chatRoomId.toString())) + .map(messageTo -> messageTo.toMessage()); } }