Add method for cleaning up orphaned sending tasks

[MAILPOET-1587]
This commit is contained in:
Rostislav Wolny
2024-08-01 10:10:49 +02:00
committed by Aschepikov
parent 08ffe6e3cf
commit b68e6b7639
2 changed files with 37 additions and 6 deletions

View File

@@ -5,6 +5,8 @@ namespace MailPoet\Util\DataInconsistency;
use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoetVendor\Doctrine\ORM\EntityManager;
use MailPoetVendor\Doctrine\ORM\Query;
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
class DataInconsistencyRepository {
private EntityManager $entityManager;
@@ -16,14 +18,32 @@ class DataInconsistencyRepository {
}
public function getOrphanedSendingTasksCount(): int {
return (int)$this->entityManager->createQueryBuilder()
->select('count(st.id)')
$builder = $this->entityManager->createQueryBuilder()
->select('count(st.id)');
return (int)$this->buildOrphanedSendingTasksQuery($builder)->getSingleScalarResult();
}
public function cleanupOrphanedSendingTasks(): int {
$ids = $this->buildOrphanedSendingTasksQuery(
$this->entityManager->createQueryBuilder()
->select('st.id')
)->getResult();
$qb = $this->entityManager->createQueryBuilder();
return $qb->delete(ScheduledTaskEntity::class, 'st')
->where($qb->expr()->in('st.id', ':ids'))
->setParameter('ids', array_column($ids, 'id'))
->getQuery()
->execute();
}
private function buildOrphanedSendingTasksQuery(QueryBuilder $queryBuilder): Query {
return $queryBuilder
->from(ScheduledTaskEntity::class, 'st')
->leftJoin('st.sendingQueue', 'sq')
->where('sq.id IS NULL')
->andWhere('st.type = :type')
->setParameter('type', SendingQueue::TASK_TYPE)
->getQuery()
->getSingleScalarResult();
->getQuery();
}
}