Add check for orphaned subscriptions
[MAILPOET-1587]
This commit is contained in:
committed by
Aschepikov
parent
0d7898b3a5
commit
fe66e31b5f
@@ -6,7 +6,10 @@ use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Entities\SendingQueueEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Entities\SubscriberSegmentEntity;
|
||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||
use MailPoetVendor\Doctrine\ORM\Query;
|
||||
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
|
||||
@@ -48,6 +51,19 @@ class DataInconsistencyRepository {
|
||||
return intval($count);
|
||||
}
|
||||
|
||||
public function getOrphanedSubscriptionsCount(): int {
|
||||
$subscriberTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||
$segmentTable = $this->entityManager->getClassMetadata(SegmentEntity::class)->getTableName();
|
||||
$subscriberSegmentTable = $this->entityManager->getClassMetadata(SubscriberSegmentEntity::class)->getTableName();
|
||||
$count = $this->entityManager->getConnection()->executeQuery("
|
||||
SELECT count(distinct ss.`id`) FROM $subscriberSegmentTable ss
|
||||
LEFT JOIN $segmentTable seg ON seg.`id` = ss.`segment_id`
|
||||
LEFT JOIN $subscriberTable sub ON sub.`id` = ss.`subscriber_id`
|
||||
WHERE seg.`id` IS NULL OR sub.`id` IS NULL
|
||||
")->fetchOne();
|
||||
return intval($count);
|
||||
}
|
||||
|
||||
public function cleanupOrphanedSendingTasks(): int {
|
||||
$ids = $this->buildOrphanedSendingTasksQuery(
|
||||
$this->entityManager->createQueryBuilder()
|
||||
@@ -100,6 +116,18 @@ class DataInconsistencyRepository {
|
||||
return $deletedQueuesCount;
|
||||
}
|
||||
|
||||
public function cleanupOrphanedSubscriptions(): int {
|
||||
$subscriberTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||
$segmentTable = $this->entityManager->getClassMetadata(SegmentEntity::class)->getTableName();
|
||||
$subscriberSegmentTable = $this->entityManager->getClassMetadata(SubscriberSegmentEntity::class)->getTableName();
|
||||
return (int)$this->entityManager->getConnection()->executeStatement("
|
||||
DELETE ss FROM $subscriberSegmentTable ss
|
||||
LEFT JOIN $segmentTable seg ON seg.`id` = ss.`segment_id`
|
||||
LEFT JOIN $subscriberTable sub ON sub.`id` = ss.`subscriber_id`
|
||||
WHERE seg.`id` IS NULL OR sub.`id` IS NULL
|
||||
");
|
||||
}
|
||||
|
||||
private function buildOrphanedSendingTasksQuery(QueryBuilder $queryBuilder): Query {
|
||||
return $queryBuilder
|
||||
->from(ScheduledTaskEntity::class, 'st')
|
||||
|
Reference in New Issue
Block a user