@Override public DeleteResult delete(MessageId messageId, List<MailboxId> mailboxIds, MailboxSession mailboxSession) throws MailboxException { MessageIdMapper messageIdMapper = mailboxSessionMapperFactory.getMessageIdMapper(mailboxSession); assertRightsOnMailboxes(mailboxIds, mailboxSession, Right.DeleteMessages); List<MailboxMessage> messageList = messageIdMapper .find(ImmutableList.of(messageId), MessageMapper.FetchType.Metadata) .stream() .filter(inMailboxes(mailboxIds)) .collect(Guavate.toImmutableList()); if (!messageList.isEmpty()) { delete(messageIdMapper, messageList, mailboxSession); return DeleteResult.destroyed(messageId); } return DeleteResult.notFound(messageId); }
@Override public DeleteResult delete(List<MessageId> messageIds, MailboxSession mailboxSession) throws MailboxException { MessageIdMapper messageIdMapper = mailboxSessionMapperFactory.getMessageIdMapper(mailboxSession); List<MailboxMessage> messageList = messageIdMapper.find(messageIds, MessageMapper.FetchType.Metadata); ImmutableSet<MailboxId> allowedMailboxIds = getAllowedMailboxIds(mailboxSession, messageList, Right.DeleteMessages); ImmutableSet<MessageId> accessibleMessages = messageList.stream() .filter(message -> allowedMailboxIds.contains(message.getMailboxId())) .map(MailboxMessage::getMessageId) .distinct() .collect(Guavate.toImmutableSet()); Sets.SetView<MessageId> nonAccessibleMessages = Sets.difference(ImmutableSet.copyOf(messageIds), accessibleMessages); delete(messageIdMapper, messageList, mailboxSession); return DeleteResult.builder() .addDestroyed(accessibleMessages) .addNotFound(nonAccessibleMessages) .build(); }