Delete the user status without loading it first

Signed-off-by: Joas Schilling <coding@schilljs.com>
pull/31106/head
Joas Schilling 4 years ago
parent c5d11abff9
commit 194338cca3
No known key found for this signature in database
GPG Key ID: 7076EA9751AACDDA
  1. 19
      apps/user_status/lib/Db/UserStatusMapper.php
  2. 15
      apps/user_status/lib/Service/StatusService.php

@ -158,4 +158,23 @@ class UserStatusMapper extends QBMapper {
$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;
}
}

@ -468,16 +468,13 @@ class StatusService {
// 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));

Loading…
Cancel
Save