Refactor restoring newsletters with running scheduled tasks

[MAILPOET-2898]
This commit is contained in:
Rostislav Wolny
2020-06-17 10:35:33 +02:00
committed by Veljko V
parent 2db677f9de
commit bd1361d24d
2 changed files with 4 additions and 12 deletions

View File

@ -173,26 +173,17 @@ class NewslettersRepository extends Repository {
->setParameter('ids', $ids) ->setParameter('ids', $ids)
->getQuery()->execute(); ->getQuery()->execute();
// Restore scheduled tasks // Restore scheduled tasks and pause running ones
$scheduledTasksTable = $this->entityManager->getClassMetadata(ScheduledTaskEntity::class)->getTableName(); $scheduledTasksTable = $this->entityManager->getClassMetadata(ScheduledTaskEntity::class)->getTableName();
$sendingQueueTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName(); $sendingQueueTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
$this->entityManager->getConnection()->executeUpdate(" $this->entityManager->getConnection()->executeUpdate("
UPDATE $scheduledTasksTable t UPDATE $scheduledTasksTable t
JOIN $sendingQueueTable q ON t.`id` = q.`task_id` JOIN $sendingQueueTable q ON t.`id` = q.`task_id`
SET t.`deleted_at` = null SET t.`deleted_at` = null, t.`status` = IFNULL(t.status, :pausedStatus)
WHERE q.`newsletter_id` IN (:ids) WHERE q.`newsletter_id` IN (:ids)
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
// Pause restored running scheduled tasks
$this->entityManager->getConnection()->executeUpdate("
UPDATE $scheduledTasksTable t
JOIN $sendingQueueTable q ON t.`id` = q.`task_id`
SET t.`status` = :status
WHERE q.`newsletter_id` IN (:ids)
AND t.`status` IS NULL
", [ ", [
'ids' => $ids, 'ids' => $ids,
'status' => ScheduledTaskEntity::STATUS_PAUSED, 'pausedStatus' => ScheduledTaskEntity::STATUS_PAUSED,
], [ ], [
'ids' => Connection::PARAM_INT_ARRAY, 'ids' => Connection::PARAM_INT_ARRAY,
]); ]);

View File

@ -115,6 +115,7 @@ class NewsletterRepositoryTest extends \MailPoetTest {
assert($scheduledTask instanceof ScheduledTaskEntity); assert($scheduledTask instanceof ScheduledTaskEntity);
$this->entityManager->refresh($scheduledTask); $this->entityManager->refresh($scheduledTask);
expect($scheduledTask->getDeletedAt())->null(); expect($scheduledTask->getDeletedAt())->null();
expect($scheduledTask->getStatus())->equals(ScheduledTaskEntity::STATUS_SCHEDULED);
} }
public function testItBulkDeleteNewslettersAndChildren() { public function testItBulkDeleteNewslettersAndChildren() {