This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit b78a414317cd7b26897d832e0a11cd31dc10c046
Author: Benoit TELLIER <[email protected]>
AuthorDate: Mon Dec 1 15:59:07 2025 +0100

    JAMES-3340 Leverage Optional for row -> ThreadId transformation
---
 .../cassandra/projections/CassandraEmailQueryView.java     | 14 ++++----------
 .../postgres/projections/PostgresEmailQueryViewDAO.java    | 14 ++++----------
 2 files changed, 8 insertions(+), 20 deletions(-)

diff --git 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java
 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java
index 68d6dcfdf7..58bd2b3178 100644
--- 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java
+++ 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java
@@ -35,7 +35,7 @@ import static 
org.apache.james.jmap.cassandra.projections.table.CassandraEmailQu
 
 import java.time.Instant;
 import java.time.ZonedDateTime;
-import java.util.UUID;
+import java.util.Optional;
 import java.util.function.Function;
 
 import jakarta.inject.Inject;
@@ -243,20 +243,14 @@ public class CassandraEmailQueryView implements 
EmailQueryView {
     private Function<Row, EmailEntry> asEmailEntry(CqlIdentifier dateField) {
         return (Row row) -> {
             CassandraMessageId messageId = 
CassandraMessageId.Factory.of(row.getUuid(MESSAGE_ID));
-            ThreadId threadId = getThreadIdFromRow(row, messageId);
+            ThreadId threadId = 
Optional.ofNullable(row.get(CassandraEmailQueryViewTable.THREAD_ID, 
TypeCodecs.TIMEUUID))
+                .map(uuid -> 
ThreadId.fromBaseMessageId(CassandraMessageId.Factory.of(uuid)))
+                .orElseGet(() -> ThreadId.fromBaseMessageId(messageId));
             Instant messageDate = row.getInstant(dateField);
             return new EmailEntry(messageId, threadId, messageDate);
         };
     }
 
-    private ThreadId getThreadIdFromRow(Row row, MessageId messageId) {
-        UUID threadIdUUID = row.get(CassandraEmailQueryViewTable.THREAD_ID, 
TypeCodecs.TIMEUUID);
-        if (threadIdUUID == null) {
-            return ThreadId.fromBaseMessageId(messageId);
-        }
-        return 
ThreadId.fromBaseMessageId(CassandraMessageId.Factory.of(threadIdUUID));
-    }
-
     @Override
     public Mono<Void> delete(MailboxId mailboxId, MessageId messageId) {
         CassandraMessageId cassandraMessageId = (CassandraMessageId) messageId;
diff --git 
a/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java
 
b/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java
index 6e05589ba7..aa49bfd174 100644
--- 
a/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java
+++ 
b/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java
@@ -30,7 +30,7 @@ import static 
org.apache.james.jmap.postgres.projections.PostgresEmailQueryViewD
 import java.time.Instant;
 import java.time.OffsetDateTime;
 import java.time.ZonedDateTime;
-import java.util.UUID;
+import java.util.Optional;
 import java.util.function.Function;
 
 import jakarta.inject.Inject;
@@ -114,20 +114,14 @@ public class PostgresEmailQueryViewDAO {
     private Function<Record, EmailEntry> asEmailEntry(Field<OffsetDateTime> 
dateField) {
         return (Record record) -> {
             PostgresMessageId messageId = 
PostgresMessageId.Factory.of(record.get(MESSAGE_ID));
-            ThreadId threadId = getThreadIdFromRecord(record, messageId);
+            ThreadId threadId = Optional.ofNullable(record.get(THREAD_ID))
+                .map(uuid -> 
ThreadId.fromBaseMessageId(PostgresMessageId.Factory.of(uuid)))
+                .orElseGet(() -> ThreadId.fromBaseMessageId(messageId));
             Instant messageDate = record.get(dateField).toInstant();
             return new EmailEntry(messageId, threadId, messageDate);
         };
     }
 
-    private ThreadId getThreadIdFromRecord(Record record, MessageId messageId) 
{
-        UUID threadIdUUID = record.get(THREAD_ID);
-        if (threadIdUUID == null) {
-            return ThreadId.fromBaseMessageId(messageId);
-        }
-        return 
ThreadId.fromBaseMessageId(PostgresMessageId.Factory.of(threadIdUUID));
-    }
-
     public Mono<Void> delete(PostgresMailboxId mailboxId, PostgresMessageId 
messageId) {
         return postgresExecutor.executeVoid(dslContext -> 
Mono.from(dslContext.deleteFrom(TABLE_NAME)
             .where(MAILBOX_ID.eq(mailboxId.asUuid()))


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to