refactor: Moved `ShardingStrategy` into package `persistence` -- ALIGNE
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / persistence / storage / mongodb / MessageTo.java
index 4f93695..f6c6b85 100644 (file)
@@ -2,45 +2,51 @@ package de.juplo.kafka.chat.backend.persistence.storage.mongodb;
 
 import de.juplo.kafka.chat.backend.domain.Message;
 import lombok.*;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
 
 import java.time.LocalDateTime;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.UUID;
 
 
 @AllArgsConstructor
 @NoArgsConstructor
 @Getter(AccessLevel.PACKAGE)
 @Setter(AccessLevel.PACKAGE)
-@EqualsAndHashCode(of = { "user", "id" })
-@ToString(of = { "user", "id" })
+@EqualsAndHashCode(of = { "chatRoomId", "user", "id" })
+@ToString(of = { "chatRoomId", "user", "id" })
+@Document
 class MessageTo
 {
-  final static Pattern SPLIT_ID = Pattern.compile("^([a-z-0-9]+)--([0-9]+)$");
-  private String id;
+  @Indexed
+  private String chatRoomId;
+  @Indexed
+  private String user;
+  @Field("id")
+  @Indexed
+  private Long id;
+  @Indexed
   private Long serial;
   private String time;
   private String text;
 
   Message toMessage()
   {
-    Matcher matcher = SPLIT_ID.matcher(id);
-    if (!matcher.matches())
-      throw new RuntimeException("MessageTo with invalid ID: " + id);
-    Long messageId = Long.parseLong(matcher.group(2));
-    String user = matcher.group(1);
     return new Message(
-        Message.MessageKey.of(user, messageId),
+        Message.MessageKey.of(user, id),
         serial,
         LocalDateTime.parse(time),
         text);
   }
 
-  static MessageTo from(Message message)
+  static MessageTo from(UUID chatRoomId, Message message)
   {
     return
         new MessageTo(
-             message.getUsername() + "--" + message.getId(),
+            chatRoomId.toString(),
+            message.getUsername(),
+            message.getId(),
             message.getSerialNumber(),
             message.getTimestamp().toString(),
             message.getMessageText());