Move the query to calculate the max subscriber ID to SubscribersRepository
[MAILPOET-4344]
This commit is contained in:
@ -3,11 +3,10 @@
|
||||
namespace MailPoet\Cron\Workers;
|
||||
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Settings\TrackingConfig;
|
||||
use MailPoet\Subscribers\InactiveSubscribersController;
|
||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
|
||||
class InactiveSubscribers extends SimpleWorker {
|
||||
const TASK_TYPE = 'inactive_subscribers';
|
||||
@ -23,19 +22,19 @@ class InactiveSubscribers extends SimpleWorker {
|
||||
/** @var TrackingConfig */
|
||||
private $trackingConfig;
|
||||
|
||||
/** @var EntityManager */
|
||||
private $entityManager;
|
||||
/** @var SubscribersRepository */
|
||||
private $subscribersRepository;
|
||||
|
||||
public function __construct(
|
||||
InactiveSubscribersController $inactiveSubscribersController,
|
||||
SettingsController $settings,
|
||||
TrackingConfig $trackingConfig,
|
||||
EntityManager $entityManager
|
||||
SubscribersRepository $subscribersRepository
|
||||
) {
|
||||
$this->inactiveSubscribersController = $inactiveSubscribersController;
|
||||
$this->settings = $settings;
|
||||
$this->trackingConfig = $trackingConfig;
|
||||
$this->entityManager = $entityManager;
|
||||
$this->subscribersRepository = $subscribersRepository;
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
@ -58,11 +57,7 @@ class InactiveSubscribers extends SimpleWorker {
|
||||
if (isset($meta['max_subscriber_id'])) {
|
||||
$maxSubscriberId = $meta['max_subscriber_id'];
|
||||
} else {
|
||||
$maxSubscriberId = $this->entityManager->createQueryBuilder()
|
||||
->select('MAX(s.id)')
|
||||
->from(SubscriberEntity::class, 's')
|
||||
->getQuery()
|
||||
->getSingleScalarResult();
|
||||
$maxSubscriberId = $this->subscribersRepository->getMaxSubscriberId();
|
||||
}
|
||||
|
||||
while ($lastSubscriberId <= $maxSubscriberId) {
|
||||
|
@ -362,4 +362,14 @@ class SubscribersRepository extends Repository {
|
||||
->getQuery()
|
||||
->getArrayResult();
|
||||
}
|
||||
|
||||
public function getMaxSubscriberId(): int {
|
||||
$maxSubscriberId = $this->entityManager->createQueryBuilder()
|
||||
->select('MAX(s.id)')
|
||||
->from(SubscriberEntity::class, 's')
|
||||
->getQuery()
|
||||
->getSingleScalarResult();
|
||||
|
||||
return is_int($maxSubscriberId) ? $maxSubscriberId : 0;
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Settings\TrackingConfig;
|
||||
use MailPoet\Subscribers\InactiveSubscribersController;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
|
||||
class InactiveSubscribersTest extends \MailPoetTest {
|
||||
@ -22,12 +23,16 @@ class InactiveSubscribersTest extends \MailPoetTest {
|
||||
/** @var ScheduledTasksRepository */
|
||||
private $scheduledTasksRepository;
|
||||
|
||||
/** @var SubscribersRepository */
|
||||
private $subscribersRepository;
|
||||
|
||||
public function _before() {
|
||||
$this->settings = SettingsController::getInstance();
|
||||
$this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class);
|
||||
$this->truncateEntity(ScheduledTaskEntity::class);
|
||||
$this->settings->set('tracking.level', TrackingConfig::LEVEL_PARTIAL);
|
||||
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
|
||||
$this->subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class);
|
||||
parent::_before();
|
||||
}
|
||||
|
||||
@ -39,7 +44,7 @@ class InactiveSubscribersTest extends \MailPoetTest {
|
||||
'reactivateInactiveSubscribers' => Stub\Expected::once(),
|
||||
], $this);
|
||||
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager);
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository);
|
||||
$worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
|
||||
|
||||
$task = $this->scheduledTasksRepository->findOneBy(
|
||||
@ -60,7 +65,7 @@ class InactiveSubscribersTest extends \MailPoetTest {
|
||||
'reactivateInactiveSubscribers' => Stub\Expected::never(),
|
||||
], $this);
|
||||
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager);
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository);
|
||||
$worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
|
||||
}
|
||||
|
||||
@ -72,7 +77,7 @@ class InactiveSubscribersTest extends \MailPoetTest {
|
||||
'reactivateInactiveSubscribers' => Stub\Expected::never(),
|
||||
], $this);
|
||||
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager);
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository);
|
||||
$worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
|
||||
|
||||
$task = $this->scheduledTasksRepository->findOneBy(
|
||||
@ -92,7 +97,7 @@ class InactiveSubscribersTest extends \MailPoetTest {
|
||||
'reactivateInactiveSubscribers' => Stub\Expected::never(),
|
||||
], $this);
|
||||
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager);
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository);
|
||||
$task = new ScheduledTaskEntity();
|
||||
$task->setMeta(['max_subscriber_id' => 2001 /* 3 iterations of BATCH_SIZE in markInactiveSubscribers */]);
|
||||
$this->entityManager->persist($task);
|
||||
@ -113,7 +118,7 @@ class InactiveSubscribersTest extends \MailPoetTest {
|
||||
|
||||
$task = new ScheduledTaskEntity();
|
||||
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager);
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository);
|
||||
$worker->processTaskStrategy($task, microtime(true));
|
||||
|
||||
$meta = $task->getMeta();
|
||||
@ -128,7 +133,7 @@ class InactiveSubscribersTest extends \MailPoetTest {
|
||||
'reactivateInactiveSubscribers' => Stub\Expected::never(),
|
||||
], $this);
|
||||
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager);
|
||||
$worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository);
|
||||
$this->expectException(\Exception::class);
|
||||
$this->expectExceptionMessage('Maximum execution time has been reached.');
|
||||
$worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true) - $this->cronHelper->getDaemonExecutionLimit());
|
||||
|
Reference in New Issue
Block a user