add transactional versions to delete message functions

This commit is contained in:
ialokim
2023-05-12 23:58:59 +02:00
parent b88dbee881
commit ce10e6770f
2 changed files with 38 additions and 16 deletions

View File

@@ -96,12 +96,24 @@ public interface ConversationManager {
*/
DeletionResult deleteAllMessages(ContactId c) throws DbException;
/**
* Deletes all messages exchanged with the given contact.
*/
DeletionResult deleteAllMessages(Transaction txn, ContactId c)
throws DbException;
/**
* Deletes the given set of messages associated with the given contact.
*/
DeletionResult deleteMessages(ContactId c, Collection<MessageId> messageIds)
throws DbException;
/**
* Deletes the given set of messages associated with the given contact.
*/
DeletionResult deleteMessages(Transaction txn, ContactId c,
Collection<MessageId> messageIds) throws DbException;
@NotNullByDefault
interface ConversationClient {

View File

@@ -146,27 +146,37 @@ class ConversationManagerImpl implements ConversationManager {
@Override
public DeletionResult deleteAllMessages(ContactId c) throws DbException {
return db.transactionWithResult(false, txn -> {
DeletionResult result = new DeletionResult();
for (ConversationClient client : clients) {
result.addDeletionResult(client.deleteAllMessages(txn, c));
}
return result;
});
return db.transactionWithResult(false, txn ->
deleteAllMessages(txn, c));
}
@Override
public DeletionResult deleteAllMessages(Transaction txn, ContactId c)
throws DbException {
DeletionResult result = new DeletionResult();
for (ConversationClient client : clients) {
result.addDeletionResult(client.deleteAllMessages(txn, c));
}
return result;
}
@Override
public DeletionResult deleteMessages(ContactId c,
Collection<MessageId> toDelete) throws DbException {
return db.transactionWithResult(false, txn -> {
DeletionResult result = new DeletionResult();
for (ConversationClient client : clients) {
Set<MessageId> idSet = client.getMessageIds(txn, c);
idSet.retainAll(toDelete);
result.addDeletionResult(client.deleteMessages(txn, c, idSet));
}
return result;
});
return db.transactionWithResult(false, txn ->
deleteMessages(txn, c, toDelete));
}
@Override
public DeletionResult deleteMessages(Transaction txn, ContactId c,
Collection<MessageId> toDelete) throws DbException {
DeletionResult result = new DeletionResult();
for (ConversationClient client : clients) {
Set<MessageId> idSet = client.getMessageIds(txn, c);
idSet.retainAll(toDelete);
result.addDeletionResult(client.deleteMessages(txn, c, idSet));
}
return result;
}
}