Add method for cleaning up orphaned sending tasks
[MAILPOET-1587]
This commit is contained in:
committed by
Aschepikov
parent
08ffe6e3cf
commit
b68e6b7639
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -10,11 +10,11 @@ use MailPoet\Test\DataFactories\SendingQueue;
|
||||
class DataInconsistencyRepositoryTest extends \MailPoetTest {
|
||||
private DataInconsistencyRepository $repository;
|
||||
|
||||
public function _before() {
|
||||
public function _before(): void {
|
||||
$this->repository = $this->diContainer->get(DataInconsistencyRepository::class);
|
||||
}
|
||||
|
||||
public function testItFetchesOrphanedSendingTasksCount() {
|
||||
public function testItFetchesOrphanedSendingTasksCount(): void {
|
||||
$orphanedSendingTasksCount = $this->repository->getOrphanedSendingTasksCount();
|
||||
verify($orphanedSendingTasksCount)->equals(0);
|
||||
|
||||
@@ -30,4 +30,15 @@ class DataInconsistencyRepositoryTest extends \MailPoetTest {
|
||||
$orphanedSendingTasksCount = $this->repository->getOrphanedSendingTasksCount();
|
||||
verify($orphanedSendingTasksCount)->equals(2);
|
||||
}
|
||||
|
||||
public function testItCleansUpOrphanedSendingTasks(): void {
|
||||
(new ScheduledTask())->create(SendingQueueWorker::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||
(new ScheduledTask())->create(SendingQueueWorker::TASK_TYPE, null);
|
||||
$orphanedSendingTasksCount = $this->repository->getOrphanedSendingTasksCount();
|
||||
verify($orphanedSendingTasksCount)->equals(2);
|
||||
|
||||
$this->repository->cleanupOrphanedSendingTasks();
|
||||
$orphanedSendingTasksCount = $this->repository->getOrphanedSendingTasksCount();
|
||||
verify($orphanedSendingTasksCount)->equals(0);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user