Delete subscribers and update topic totals when deleting target
This commit is contained in:
parent
7a17f102c4
commit
d670c07ca4
2 changed files with 43 additions and 3 deletions
|
@ -171,6 +171,7 @@ const DELETE_TYPE_CACHE_BY_TIMESTAMP = 'cacheByTimeStamp';
|
||||||
const DELETE_TYPE_CACHE_BY_RESOURCE = 'cacheByResource';
|
const DELETE_TYPE_CACHE_BY_RESOURCE = 'cacheByResource';
|
||||||
const DELETE_TYPE_SCHEDULES = 'schedules';
|
const DELETE_TYPE_SCHEDULES = 'schedules';
|
||||||
const DELETE_TYPE_TOPIC = 'topic';
|
const DELETE_TYPE_TOPIC = 'topic';
|
||||||
|
const DELETE_TYPE_TARGET = 'target';
|
||||||
// Mail Types
|
// Mail Types
|
||||||
const MAIL_TYPE_VERIFICATION = 'verification';
|
const MAIL_TYPE_VERIFICATION = 'verification';
|
||||||
const MAIL_TYPE_MAGIC_SESSION = 'magicSession';
|
const MAIL_TYPE_MAGIC_SESSION = 'magicSession';
|
||||||
|
|
|
@ -158,6 +158,9 @@ class Deletes extends Action
|
||||||
case DELETE_TYPE_TOPIC:
|
case DELETE_TYPE_TOPIC:
|
||||||
$this->deleteTopic($project, $getProjectDB, $document);
|
$this->deleteTopic($project, $getProjectDB, $document);
|
||||||
break;
|
break;
|
||||||
|
case DELETE_TYPE_TARGET:
|
||||||
|
$this->deleteTarget($project, $getProjectDB, $document);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new \Exception('No delete operation for type: ' . \strval($type));
|
throw new \Exception('No delete operation for type: ' . \strval($type));
|
||||||
break;
|
break;
|
||||||
|
@ -221,6 +224,35 @@ class Deletes extends Action
|
||||||
], $dbForProject);
|
], $dbForProject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Document $project
|
||||||
|
* @param callable $getProjectDB
|
||||||
|
* @param Document $target
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected function deleteTarget(Document $project, callable $getProjectDB, Document $target)
|
||||||
|
{
|
||||||
|
/** @var Database */
|
||||||
|
$dbForProject = $getProjectDB($project);
|
||||||
|
|
||||||
|
// Delete subscribers and decrement topic counts
|
||||||
|
$this->deleteByGroup(
|
||||||
|
'subscribers',
|
||||||
|
[
|
||||||
|
Query::equal('targetInternalId', [$target->getInternalId()])
|
||||||
|
],
|
||||||
|
$dbForProject,
|
||||||
|
function (Document $subscriber) use ($dbForProject) {
|
||||||
|
$topicId = $subscriber->getAttribute('topicId');
|
||||||
|
$topicInternalId = $subscriber->getAttribute('topicInternalId');
|
||||||
|
$topic = $dbForProject->getDocument('topics', $topicId);
|
||||||
|
if (!$topic->isEmpty() && $topic->getInternalId() === $topicInternalId) {
|
||||||
|
$dbForProject->decreaseDocumentAttribute('topics', $topicId, 'total', min: 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Document $project
|
* @param Document $project
|
||||||
* @param callable $getProjectDB
|
* @param callable $getProjectDB
|
||||||
|
@ -563,9 +595,16 @@ class Deletes extends Action
|
||||||
], $dbForProject);
|
], $dbForProject);
|
||||||
|
|
||||||
// Delete targets
|
// Delete targets
|
||||||
$this->deleteByGroup('targets', [
|
$this->listByGroup(
|
||||||
Query::equal('userInternalId', [$userInternalId])
|
'targets',
|
||||||
], $dbForProject);
|
[
|
||||||
|
Query::equal('userInternalId', [$userInternalId])
|
||||||
|
],
|
||||||
|
$dbForProject,
|
||||||
|
function (Document $target) use ($getProjectDB, $project) {
|
||||||
|
$this->deleteTarget($project, $getProjectDB, $target);
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue