feat: Introduced `ChatHome` that gives multiple `Chatroom`s a home
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / api / ChatBackendController.java
index d613092..385c95c 100644 (file)
@@ -1,6 +1,7 @@
-package de.juplo.kafka.chatroom.api;
+package de.juplo.kafka.chat.backend.api;
 
-import de.juplo.kafka.chatroom.domain.Chatroom;
+import de.juplo.kafka.chat.backend.domain.ChatHome;
+import de.juplo.kafka.chat.backend.domain.Chatroom;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
@@ -10,37 +11,33 @@ import reactor.core.publisher.Mono;
 import java.time.Clock;
 import java.time.LocalDateTime;
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.UUID;
 
 
 @RestController
 @RequiredArgsConstructor
-public class ChatroomController
+public class ChatBackendController
 {
-  private final Map<UUID, Chatroom> chatrooms = new HashMap<>();
+  private final ChatHome chatHome;
   private final Clock clock;
 
 
   @PostMapping("create")
   public Chatroom create(@RequestBody String name)
   {
-    Chatroom chatroom = new Chatroom(UUID.randomUUID(), name);
-    chatrooms.put(chatroom.getId(), chatroom);
-    return chatroom;
+    return chatHome.createChatroom(name);
   }
 
   @GetMapping("list")
   public Collection<Chatroom> list()
   {
-    return chatrooms.values();
+    return chatHome.list();
   }
 
   @GetMapping("get/{chatroomId}")
   public Chatroom get(@PathVariable UUID chatroomId)
   {
-    return chatrooms.get(chatroomId);
+    return chatHome.getChatroom(chatroomId);
   }
 
   @PutMapping("put/{chatroomId}/{username}/{messageId}")
@@ -50,7 +47,7 @@ public class ChatroomController
       @PathVariable Long messageId,
       @RequestBody String text)
   {
-    Chatroom chatroom = chatrooms.get(chatroomId);
+    Chatroom chatroom = chatHome.getChatroom(chatroomId);
     return
         chatroom
             .addMessage(
@@ -69,8 +66,8 @@ public class ChatroomController
       @PathVariable Long messageId)
   {
     return
-        chatrooms
-            .get(chatroomId)
+        chatHome
+            .getChatroom(chatroomId)
             .getMessage(username, messageId)
             .map(message -> MessageTo.from(message));
   }
@@ -80,8 +77,8 @@ public class ChatroomController
       produces = MediaType.TEXT_EVENT_STREAM_VALUE)
   public Flux<MessageTo> listen(@PathVariable UUID chatroomId)
   {
-    return chatrooms
-        .get(chatroomId)
+    return chatHome
+        .getChatroom(chatroomId)
         .listen()
         .log()
         .map(message -> MessageTo.from(message));