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 95b343b1d85a59d51327faf8b2896ccb38aac471 Author: Quan Tran <[email protected]> AuthorDate: Thu Mar 19 16:11:43 2026 +0700 JAMES-4191 MessageIdMapper: add findMailboxesReactive(MessageId messageId) API --- .../mailbox/cassandra/mail/CassandraMessageIdMapper.java | 11 ++++++++--- .../mailbox/inmemory/mail/InMemoryMessageIdMapper.java | 13 +++++++++---- .../mailbox/postgres/mail/PostgresMessageIdMapper.java | 5 +++++ .../apache/james/mailbox/store/mail/MessageIdMapper.java | 2 ++ .../james/mailbox/store/mail/model/MessageIdMapperTest.java | 7 +++++++ 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java index 7cd8064c5e..9a37a8ccbc 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java @@ -163,12 +163,17 @@ public class CassandraMessageIdMapper implements MessageIdMapper { @Override public List<MailboxId> findMailboxes(MessageId messageId) { + return findMailboxesReactive(messageId) + .collectList() + .block(); + } + + @Override + public Flux<MailboxId> findMailboxesReactive(MessageId messageId) { return imapUidDAO.retrieve((CassandraMessageId) messageId, Optional.empty(), chooseReadConsistency()) .map(CassandraMessageMetadata::getComposedMessageId) .map(ComposedMessageIdWithMetaData::getComposedMessageId) - .map(ComposedMessageId::getMailboxId) - .collectList() - .block(); + .map(ComposedMessageId::getMailboxId); } public JamesExecutionProfiles.ConsistencyChoice chooseReadConsistency() { diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java index 61c38d3148..b90eb181d0 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java @@ -93,10 +93,15 @@ public class InMemoryMessageIdMapper implements MessageIdMapper { @Override public List<MailboxId> findMailboxes(MessageId messageId) { - return find(ImmutableList.of(messageId), MessageMapper.FetchType.METADATA) - .stream() - .map(MailboxMessage::getMailboxId) - .collect(ImmutableList.toImmutableList()); + return findMailboxesReactive(messageId) + .collectList() + .block(); + } + + @Override + public Flux<MailboxId> findMailboxesReactive(MessageId messageId) { + return findReactive(ImmutableList.of(messageId), MessageMapper.FetchType.METADATA) + .map(MailboxMessage::getMailboxId); } @Override diff --git a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageIdMapper.java b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageIdMapper.java index e8f910eaa2..00ae4820b4 100644 --- a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageIdMapper.java +++ b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageIdMapper.java @@ -140,6 +140,11 @@ public class PostgresMessageIdMapper implements MessageIdMapper { .block(); } + @Override + public Flux<MailboxId> findMailboxesReactive(MessageId messageId) { + return mailboxMessageDAO.findMailboxes(PostgresMessageId.class.cast(messageId)); + } + @Override public void save(MailboxMessage mailboxMessage) throws MailboxException { PostgresMailboxId mailboxId = PostgresMailboxId.class.cast(mailboxMessage.getMailboxId()); diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java index dff3bf456c..74c19f68fa 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java @@ -54,6 +54,8 @@ public interface MessageIdMapper { List<MailboxId> findMailboxes(MessageId messageId); + Flux<MailboxId> findMailboxesReactive(MessageId messageId); + void save(MailboxMessage mailboxMessage) throws MailboxNotFoundException, MailboxException; void copyInMailbox(MailboxMessage mailboxMessage, Mailbox mailbox) throws MailboxException; diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java index 618baacec9..62eeb4a13f 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java @@ -145,6 +145,13 @@ public abstract class MessageIdMapperTest { assertThat(mailboxes).containsOnly(benwaInboxMailbox.getMailboxId()); } + @Test + void findMailboxesReactiveShouldReturnOneMailboxWhenMessageExistsInOneMailbox() throws MailboxException { + saveMessages(); + List<MailboxId> mailboxes = sut.findMailboxesReactive(message1.getMessageId()).collectList().block(); + assertThat(mailboxes).containsOnly(benwaInboxMailbox.getMailboxId()); + } + @Test void findMailboxesShouldReturnTwoMailboxesWhenMessageExistsInTwoMailboxes() throws MailboxException { saveMessages(); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
