Replace old model usages by Doctrine

[MAILPOET-4303]
This commit is contained in:
Jan Lysý
2023-03-06 17:31:02 +01:00
committed by Aschepikov
parent 2ead4214cd
commit 2547f4bfbd
2 changed files with 21 additions and 20 deletions

View File

@ -4,11 +4,10 @@ namespace MailPoet\Cron\Workers;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
use MailPoet\Entities\StatisticsBounceEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Mailer\Mailer;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Services\Bridge;
@ -16,7 +15,6 @@ use MailPoet\Services\Bridge\API;
use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\StatisticsBouncesRepository;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Tasks\Subscribers as TaskSubscribers;
use MailPoet\Tasks\Subscribers\BatchIterator;
use MailPoetVendor\Carbon\Carbon;
@ -78,8 +76,8 @@ class Bounce extends SimpleWorker {
public function prepareTaskStrategy(ScheduledTaskEntity $task, $timer) {
$this->scheduledTaskSubscribersRepository->createSubscribersForBounceWorker($task);
if (!ScheduledTaskSubscriber::getUnprocessedCount($task->getId())) {
ScheduledTaskSubscriber::where('task_id', $task->getId())->deleteMany();
if (!$this->scheduledTaskSubscribersRepository->countBy(['task' => $task, 'processed' => ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED])) {
$this->scheduledTaskSubscribersRepository->deleteByScheduledTask($task);
return false;
}
return true;
@ -89,27 +87,21 @@ class Bounce extends SimpleWorker {
$subscriberBatches = new BatchIterator($task->getId(), self::BATCH_SIZE);
if (count($subscriberBatches) === 0) {
ScheduledTaskSubscriber::where('task_id', $task->getId())->deleteMany();
$this->scheduledTaskSubscribersRepository->deleteByScheduledTask($task);
return true; // mark completed
}
$parisTask = ScheduledTask::findOne($task->getId());
/** @var int[] $subscribersToProcessIds - it's required for PHPStan */
foreach ($subscriberBatches as $subscribersToProcessIds) {
// abort if execution limit is reached
$this->cronHelper->enforceExecutionLimit($timer);
if ($parisTask instanceof ScheduledTask) {
$taskSubscribers = new TaskSubscribers($parisTask);
$subscriberEmails = $this->subscribersRepository->getUndeletedSubscribersEmailsByIds($subscribersToProcessIds);
$subscriberEmails = array_column($subscriberEmails, 'email');
/** @var int[] $subscribersToProcessIds - it's required for PHPStan */
foreach ($subscriberBatches as $subscribersToProcessIds) {
// abort if execution limit is reached
$this->cronHelper->enforceExecutionLimit($timer);
$this->processEmails($task, $subscriberEmails);
$subscriberEmails = $this->subscribersRepository->getUndeletedSubscribersEmailsByIds($subscribersToProcessIds);
$subscriberEmails = array_column($subscriberEmails, 'email');
$this->processEmails($task, $subscriberEmails);
$taskSubscribers->updateProcessedSubscribers($subscribersToProcessIds);
}
$this->scheduledTaskSubscribersRepository->updateProcessedSubscribers($task, $subscribersToProcessIds);
}
return true;

View File

@ -125,6 +125,15 @@ class ScheduledTaskSubscribersRepository extends Repository {
$stmt->executeQuery();
}
public function deleteByScheduledTask(ScheduledTaskEntity $scheduledTask): void {
$this->entityManager->createQueryBuilder()
->delete(ScheduledTaskSubscriberEntity::class, 'sts')
->where('sts.task = :task')
->setParameter('task', $scheduledTask)
->getQuery()
->execute();
}
private function checkCompleted(ScheduledTaskEntity $task): void {
$count = $this->countBy(['task' => $task, 'processed' => ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED]);
if ($count === 0) {