$qb->execute();
}
+
+
+ /**
+ * Deletes a user status so we can restore the backup
+ *
+ * @param string $userId
+ * @param string $messageId
+ * @param string $status
+ * @return bool True if an entry was deleted
+ */
+ public function deleteCurrentStatusToRestoreBackup(string $userId, string $messageId, string $status): bool {
+ $qb = $this->db->getQueryBuilder();
+ $qb->delete($this->tableName)
+ ->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId)))
+ ->andWhere($qb->expr()->eq('message_id', $qb->createNamedParameter($messageId)))
+ ->andWhere($qb->expr()->eq('status', $qb->createNamedParameter($status)))
+ ->andWhere($qb->expr()->eq('is_backup', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)));
+ return $qb->executeStatement() > 0;
+ }
}
// No user status to revert, do nothing
return;
}
- try {
- $userStatus = $this->mapper->findByUserId($userId);
- if ($userStatus->getMessageId() !== $messageId || $userStatus->getStatus() !== $status) {
- // Another status is set automatically, do nothing
- return;
- }
- $this->mapper->delete($userStatus);
- } catch (DoesNotExistException $ex) {
- // No current status => nothing to delete
+
+ $deleted = $this->mapper->deleteCurrentStatusToRestoreBackup($userId, $messageId ?? '', $status);
+ if (!$deleted) {
+ // Another status is set automatically or no status, do nothing
+ return;
}
+
$backupUserStatus->setIsBackup(false);
// Remove the underscore prefix added when creating the backup
$backupUserStatus->setUserId(substr($backupUserStatus->getUserId(), 1));