refactor: Fixed return-types of the controller
authorKai Moritz <kai@juplo.de>
Thu, 5 Jan 2023 23:44:44 +0000 (00:44 +0100)
committerKai Moritz <kai@juplo.de>
Sun, 15 Jan 2023 18:35:59 +0000 (19:35 +0100)
- Renamed and moved `ChatroomInfo` to `ChatroomTo`
- Switched return-types from `Chatroom` to `ChatroomTo`

src/main/java/de/juplo/kafka/chat/backend/ChatBackendApplication.java
src/main/java/de/juplo/kafka/chat/backend/api/ChatBackendController.java
src/main/java/de/juplo/kafka/chat/backend/api/ChatroomTo.java [new file with mode: 0644]
src/main/java/de/juplo/kafka/chat/backend/domain/ChatHome.java
src/main/java/de/juplo/kafka/chat/backend/persistence/ChatroomInfo.java [deleted file]
src/main/java/de/juplo/kafka/chat/backend/persistence/LocalJsonFilesStorageStrategy.java
src/main/java/de/juplo/kafka/chat/backend/persistence/StorageStrategy.java

index 37eeeee..0700496 100644 (file)
@@ -21,7 +21,7 @@ public class ChatBackendApplication
        @PreDestroy
        public void onExit()
        {
-               storageStrategy.writeChatrooms(Flux.fromIterable(chatHome.list()));
+               storageStrategy.writeChatrooms(Flux.fromStream(chatHome.list()));
        }
 
        public static void main(String[] args)
index 7d1655d..8fccaa9 100644 (file)
@@ -13,6 +13,7 @@ import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.Optional;
 import java.util.UUID;
+import java.util.stream.Stream;
 
 
 @RestController
@@ -24,21 +25,21 @@ public class ChatBackendController
 
 
   @PostMapping("create")
-  public Chatroom create(@RequestBody String name)
+  public ChatroomTo create(@RequestBody String name)
   {
-    return chatHome.createChatroom(name);
+    return ChatroomTo.from(chatHome.createChatroom(name));
   }
 
   @GetMapping("list")
-  public Collection<Chatroom> list()
+  public Stream<ChatroomTo> list()
   {
-    return chatHome.list();
+    return chatHome.list().map(chatroom -> ChatroomTo.from(chatroom));
   }
 
   @GetMapping("get/{chatroomId}")
-  public Optional<Chatroom> get(@PathVariable UUID chatroomId)
+  public Optional<ChatroomTo> get(@PathVariable UUID chatroomId)
   {
-    return chatHome.getChatroom(chatroomId);
+    return chatHome.getChatroom(chatroomId).map(chatroom -> ChatroomTo.from(chatroom));
   }
 
   @PutMapping("put/{chatroomId}/{username}/{messageId}")
diff --git a/src/main/java/de/juplo/kafka/chat/backend/api/ChatroomTo.java b/src/main/java/de/juplo/kafka/chat/backend/api/ChatroomTo.java
new file mode 100644 (file)
index 0000000..c4ad784
--- /dev/null
@@ -0,0 +1,22 @@
+package de.juplo.kafka.chat.backend.api;
+
+import de.juplo.kafka.chat.backend.domain.Chatroom;
+import lombok.Data;
+
+import java.util.UUID;
+
+@Data
+public class ChatroomTo
+{
+  private UUID id;
+  private String name;
+
+
+  public static ChatroomTo from(Chatroom chatroom)
+  {
+    ChatroomTo info = new ChatroomTo();
+    info.id = chatroom.getId();
+    info.name = chatroom.getName();
+    return info;
+  }
+}
index 2b5152c..d04bd73 100644 (file)
@@ -3,6 +3,7 @@ package de.juplo.kafka.chat.backend.domain;
 import lombok.RequiredArgsConstructor;
 
 import java.util.*;
+import java.util.stream.Stream;
 
 
 @RequiredArgsConstructor
@@ -24,8 +25,8 @@ public class ChatHome
     return Optional.ofNullable(chatrooms.get(id));
   }
 
-  public Collection<Chatroom> list()
+  public Stream<Chatroom> list()
   {
-    return chatrooms.values();
+    return chatrooms.values().stream();
   }
 }
diff --git a/src/main/java/de/juplo/kafka/chat/backend/persistence/ChatroomInfo.java b/src/main/java/de/juplo/kafka/chat/backend/persistence/ChatroomInfo.java
deleted file mode 100644 (file)
index 6536175..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package de.juplo.kafka.chat.backend.persistence;
-
-import de.juplo.kafka.chat.backend.domain.Chatroom;
-import lombok.Data;
-
-import java.util.UUID;
-
-@Data
-public class ChatroomInfo
-{
-  private UUID id;
-  private String name;
-
-
-  public static ChatroomInfo from(Chatroom chatroom)
-  {
-    ChatroomInfo info = new ChatroomInfo();
-    info.id = chatroom.getId();
-    info.name = chatroom.getName();
-    return info;
-  }
-}
index 40fa2bc..a90e2eb 100644 (file)
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonToken;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import de.juplo.kafka.chat.backend.api.ChatroomTo;
 import de.juplo.kafka.chat.backend.api.MessageTo;
 import de.juplo.kafka.chat.backend.domain.Chatroom;
 import de.juplo.kafka.chat.backend.domain.ChatroomFactory;
@@ -20,7 +21,6 @@ import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.util.LinkedHashMap;
 import java.util.function.Function;
-import java.util.stream.Collector;
 import java.util.stream.Collectors;
 
 import static java.nio.file.StandardOpenOption.CREATE;
@@ -83,9 +83,9 @@ public class LocalJsonFilesStorageStrategy implements StorageStrategy
           {
             try
             {
-              ChatroomInfo chatroomInfo = ChatroomInfo.from(chatroom);
-              generator.writeObject(chatroomInfo);
-              writeMessages(chatroomInfo, chatroom.getMessages());
+              ChatroomTo chatroomTo = ChatroomTo.from(chatroom);
+              generator.writeObject(chatroomTo);
+              writeMessages(chatroomTo, chatroom.getMessages());
             }
             catch (IOException e)
             {
@@ -114,12 +114,12 @@ public class LocalJsonFilesStorageStrategy implements StorageStrategy
       if (parser.nextToken() != JsonToken.START_ARRAY)
         throw new IllegalStateException("Expected content to be an array");
 
-      Sinks.Many<ChatroomInfo> many = Sinks.many().unicast().onBackpressureBuffer();
+      Sinks.Many<ChatroomTo> many = Sinks.many().unicast().onBackpressureBuffer();
 
       while (parser.nextToken() != JsonToken.END_ARRAY)
       {
         many
-            .tryEmitNext(mapper.readValue(parser, ChatroomInfo.class))
+            .tryEmitNext(mapper.readValue(parser, ChatroomTo.class))
             .orThrow();
       }
 
@@ -127,10 +127,10 @@ public class LocalJsonFilesStorageStrategy implements StorageStrategy
 
       return many
           .asFlux()
-          .map(chatroomInfo ->
+          .map(chatroomTo ->
           {
             LinkedHashMap<Message.MessageKey, Message> messages =
-                readMessages(chatroomInfo)
+                readMessages(chatroomTo)
                     .collect(Collectors.toMap(
                         Message::getKey,
                         Function.identity(),
@@ -143,7 +143,7 @@ public class LocalJsonFilesStorageStrategy implements StorageStrategy
                         LinkedHashMap::new))
                     .block();
             InMemoryPersistenceStrategy strategy = new InMemoryPersistenceStrategy(messages);
-            return chatroomFactory.restoreChatroom(chatroomInfo.getId(), chatroomInfo.getName(), strategy);
+            return chatroomFactory.restoreChatroom(chatroomTo.getId(), chatroomTo.getName(), strategy);
           });
     }
     catch (NoSuchFileException e)
@@ -158,10 +158,10 @@ public class LocalJsonFilesStorageStrategy implements StorageStrategy
   }
 
   @Override
-  public void writeMessages(ChatroomInfo chatroomInfo, Flux<Message> messageFlux)
+  public void writeMessages(ChatroomTo chatroomTo, Flux<Message> messageFlux)
   {
-    Path path = chatroomPath(chatroomInfo);
-    log.info("Writing messages for {} to {}", chatroomInfo, path);
+    Path path = chatroomPath(chatroomTo);
+    log.info("Writing messages for {} to {}", chatroomTo, path);
     try
     {
       Files.createDirectories(storagePath);
@@ -217,10 +217,10 @@ public class LocalJsonFilesStorageStrategy implements StorageStrategy
   }
 
   @Override
-  public Flux<Message> readMessages(ChatroomInfo chatroomInfo)
+  public Flux<Message> readMessages(ChatroomTo chatroomTo)
   {
-    Path path = chatroomPath(chatroomInfo);
-    log.info("Reading messages for {} from {}", chatroomInfo, path);
+    Path path = chatroomPath(chatroomTo);
+    log.info("Reading messages for {} from {}", chatroomTo, path);
     try
     {
       JsonParser parser =
@@ -249,7 +249,7 @@ public class LocalJsonFilesStorageStrategy implements StorageStrategy
       log.info(
           "{} does not exist - starting with empty chat for {}",
           path,
-          chatroomInfo);
+          chatroomTo);
       return Flux.empty();
     }
     catch (IOException e)
@@ -263,8 +263,8 @@ public class LocalJsonFilesStorageStrategy implements StorageStrategy
     return storagePath.resolve(Path.of(CHATROOMS_FILENAME));
   }
 
-  Path chatroomPath(ChatroomInfo chatroomInfo)
+  Path chatroomPath(ChatroomTo chatroomTo)
   {
-    return storagePath.resolve(Path.of(chatroomInfo.getId().toString() + ".json"));
+    return storagePath.resolve(Path.of(chatroomTo.getId().toString() + ".json"));
   }
 }
index 3c268ca..38a9e98 100644 (file)
@@ -1,5 +1,6 @@
 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.Message;
 import reactor.core.publisher.Flux;
@@ -9,6 +10,6 @@ public interface StorageStrategy
 {
   void writeChatrooms(Flux<Chatroom> chatroomFlux);
   Flux<Chatroom> readChatrooms();
-  void writeMessages(ChatroomInfo chatroomInfo, Flux<Message> messageFlux);
-  Flux<Message> readMessages(ChatroomInfo chatroomInfo);
+  void writeMessages(ChatroomTo chatroomTo, Flux<Message> messageFlux);
+  Flux<Message> readMessages(ChatroomTo chatroomTo);
 }