Refactor to Doctrine

[MAILPOET-3765]
This commit is contained in:
Pavel Dohnal
2021-09-06 13:38:02 +02:00
committed by Veljko V
parent 995b716fe3
commit db04687f3c
3 changed files with 33 additions and 9 deletions

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Cron\Workers;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Mailer\Mailer;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\ScheduledTaskSubscriber;
@@ -9,6 +10,7 @@ use MailPoet\Models\Subscriber;
use MailPoet\Services\Bridge;
use MailPoet\Services\Bridge\API;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Tasks\Bounce as BounceTask;
use MailPoet\Tasks\Subscribers as TaskSubscribers;
use MailPoet\Tasks\Subscribers\BatchIterator;
@@ -30,13 +32,18 @@ class Bounce extends SimpleWorker {
/** @var Bridge */
private $bridge;
/** @var SubscribersRepository */
private $subscribersRepository;
public function __construct(
SettingsController $settings,
SubscribersRepository $subscribersRepository,
Bridge $bridge
) {
$this->settings = $settings;
$this->bridge = $bridge;
parent::__construct();
$this->subscribersRepository = $subscribersRepository;
}
public function init() {
@@ -73,10 +80,7 @@ class Bounce extends SimpleWorker {
// abort if execution limit is reached
$this->cronHelper->enforceExecutionLimit($timer);
$subscriberEmails = Subscriber::select('email')
->whereIn('id', $subscribersToProcessIds)
->whereNull('deleted_at')
->findArray();
$subscriberEmails = $this->subscribersRepository->getUndeletedSubscribersEmailsByIds($subscribersToProcessIds);
$subscriberEmails = array_column($subscriberEmails, 'email');
$this->processEmails($subscriberEmails);
@@ -98,11 +102,12 @@ class Bounce extends SimpleWorker {
continue;
}
if ($email['bounce'] === self::BOUNCED_HARD) {
$subscriber = Subscriber::findOne($email['address']);
$subscriber->status = Subscriber::STATUS_BOUNCED;
$subscriber->save();
$subscriber = $this->subscribersRepository->findOneBy(['email' => $email['address']]);
if (!$subscriber instanceof SubscriberEntity) continue;
$subscriber->setStatus(SubscriberEntity::STATUS_BOUNCED);
}
}
$this->subscribersRepository->flush();
}
public function getNextRunDate() {

View File

@@ -329,4 +329,19 @@ class SubscribersRepository extends Repository {
$subscriberEntity->setLastEngagementAt($now);
$this->flush();
}
/**
* @param array $ids
* @return string[]
*/
public function getUndeletedSubscribersEmailsByIds(array $ids): array {
return $this->entityManager->createQueryBuilder()
->select('s.email')
->from(SubscriberEntity::class, 's')
->where('s.deletedAt IS NULL')
->andWhere('s.id IN (:ids)')
->setParameter('ids', $ids)
->getQuery()
->getArrayResult();
}
}

View File

@@ -10,7 +10,6 @@ use MailPoet\Entities\SubscriberEntity;
use MailPoet\Mailer\Mailer;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Services\Bridge;
use MailPoet\Services\Bridge\API;
use MailPoet\Settings\SettingsController;
@@ -50,6 +49,7 @@ class BounceTest extends \MailPoetTest {
$this->worker = new Bounce(
$this->diContainer->get(SettingsController::class),
$this->subscribersRepository,
$this->diContainer->get(Bridge::class)
);
@@ -64,7 +64,11 @@ class BounceTest extends \MailPoetTest {
public function testItCanInitializeBridgeAPI() {
$this->setMailPoetSendingMethod();
$worker = new Bounce($this->diContainer->get(SettingsController::class), $this->diContainer->get(Bridge::class));
$worker = new Bounce(
$this->diContainer->get(SettingsController::class),
$this->subscribersRepository,
$this->diContainer->get(Bridge::class)
);
$worker->init();
expect($worker->api instanceof API)->true();
}