Add inconsistency check and fix for sending queues without newsletter

[MAILPOET-1587]
This commit is contained in:
Rostislav Wolny
2024-08-01 12:52:07 +02:00
committed by Aschepikov
parent cb4cea678a
commit 0d7898b3a5
4 changed files with 57 additions and 0 deletions

View File

@@ -3,8 +3,10 @@
namespace MailPoet\Util\DataInconsistency;
use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoetVendor\Doctrine\ORM\EntityManager;
use MailPoetVendor\Doctrine\ORM\Query;
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
@@ -35,6 +37,17 @@ class DataInconsistencyRepository {
return intval($count);
}
public function getSendingQueuesWithoutNewsletterCount(): int {
$sqTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
$newsletterTable = $this->entityManager->getClassMetadata(NewsletterEntity::class)->getTableName();
$count = $this->entityManager->getConnection()->executeQuery("
SELECT count(*) FROM $sqTable sq
LEFT JOIN $newsletterTable n ON n.`id` = sq.`newsletter_id`
WHERE n.`id` IS NULL
")->fetchOne();
return intval($count);
}
public function cleanupOrphanedSendingTasks(): int {
$ids = $this->buildOrphanedSendingTasksQuery(
$this->entityManager->createQueryBuilder()
@@ -74,6 +87,19 @@ class DataInconsistencyRepository {
");
}
public function cleanupSendingQueuesWithoutNewsletter(): int {
$sqTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
$newsletterTable = $this->entityManager->getClassMetadata(NewsletterEntity::class)->getTableName();
$deletedQueuesCount = (int)$this->entityManager->getConnection()->executeStatement("
DELETE sq FROM $sqTable sq
LEFT JOIN $newsletterTable n ON n.`id` = sq.`newsletter_id`
WHERE n.`id` IS NULL
");
$this->cleanupOrphanedSendingTasks();
return $deletedQueuesCount;
}
private function buildOrphanedSendingTasksQuery(QueryBuilder $queryBuilder): Query {
return $queryBuilder
->from(ScheduledTaskEntity::class, 'st')