]> juplo.de Git - demos/kafka/chat/commitdiff
feat: Introduces `ChatHomeService.remove(UUID)` (untested!)
authorKai Moritz <kai@juplo.de>
Sat, 11 Oct 2025 17:25:59 +0000 (19:25 +0200)
committerKai Moritz <kai@juplo.de>
Sat, 11 Oct 2025 21:04:25 +0000 (23:04 +0200)
* The introduced method is needed to setup/reset the state in the pact-test
* Therefore, it is only implemented for the implementation `in-memory`

src/main/java/de/juplo/kafka/chat/backend/domain/ChatHomeService.java
src/main/java/de/juplo/kafka/chat/backend/implementation/inmemory/ShardedChatHomeService.java
src/main/java/de/juplo/kafka/chat/backend/implementation/inmemory/SimpleChatHomeService.java

index 19fa26c47f933accfa79cbe79b294afcff827ffb..36f922829e957b0f36fd20e5faa86aaf5475d2c9 100644 (file)
@@ -12,6 +12,8 @@ public interface ChatHomeService
 
   Mono<ChatRoomInfo> getChatRoomInfo(UUID id);
 
+  default void removeChatRoom(UUID id) {}
+
   Flux<ChatRoomInfo> getChatRoomInfo();
 
   Mono<ChatRoomData> getChatRoomData(UUID id);
index 9a3845332a848f8ff5f6eddd1466d5074bad7c17..f4339c515172016ae6487fc24e822ca72147ac69 100644 (file)
@@ -1,6 +1,8 @@
 package de.juplo.kafka.chat.backend.implementation.inmemory;
 
-import de.juplo.kafka.chat.backend.domain.*;
+import de.juplo.kafka.chat.backend.domain.ChatHomeService;
+import de.juplo.kafka.chat.backend.domain.ChatRoomData;
+import de.juplo.kafka.chat.backend.domain.ChatRoomInfo;
 import de.juplo.kafka.chat.backend.domain.exceptions.ShardNotOwnedException;
 import de.juplo.kafka.chat.backend.domain.exceptions.UnknownChatroomException;
 import de.juplo.kafka.chat.backend.implementation.ShardingStrategy;
@@ -65,11 +67,18 @@ public class ShardedChatHomeService implements ChatHomeService
         : chatHomes[shard]
             .getChatRoomInfo(id)
             .onErrorMap(throwable -> throwable instanceof UnknownChatroomException
-            ? new UnknownChatroomException(
+                ? new UnknownChatroomException(
                 id,
                 shard,
                 ownedShards.stream().mapToInt(i -> i.intValue()).toArray())
-            : throwable);
+                : throwable);
+  }
+
+  @Override
+  public void removeChatRoom(UUID id)
+  {
+    int shard = selectShard(id);
+    chatHomes[shard].removeChatRoom(id);
   }
 
   @Override
index dc68bf89258d43f106b54f13df6b630d3369496e..a966349e8ddfb450eb1d2edbafeb17897db6f0d3 100644 (file)
@@ -1,6 +1,9 @@
 package de.juplo.kafka.chat.backend.implementation.inmemory;
 
-import de.juplo.kafka.chat.backend.domain.*;
+import de.juplo.kafka.chat.backend.domain.ChatHomeService;
+import de.juplo.kafka.chat.backend.domain.ChatMessageService;
+import de.juplo.kafka.chat.backend.domain.ChatRoomData;
+import de.juplo.kafka.chat.backend.domain.ChatRoomInfo;
 import de.juplo.kafka.chat.backend.domain.exceptions.UnknownChatroomException;
 import de.juplo.kafka.chat.backend.implementation.StorageStrategy;
 import lombok.extern.slf4j.Slf4j;
@@ -8,7 +11,9 @@ import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
 import java.time.Clock;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
 
 
 @Slf4j
@@ -114,6 +119,12 @@ public class SimpleChatHomeService implements ChatHomeService
         .switchIfEmpty(Mono.error(() -> new UnknownChatroomException(id)));
   }
 
+  @Override
+  public void removeChatRoom(UUID id)
+  {
+    chatRoomInfo.remove(id);
+  }
+
   @Override
   public Flux<ChatRoomInfo> getChatRoomInfo()
   {