Move query with inserting task subscribers to repository

[MAILPOET-4303]
This commit is contained in:
Jan Lysý
2023-03-06 17:05:08 +01:00
committed by Aschepikov
parent f80dfec1fb
commit 2ead4214cd
4 changed files with 28 additions and 29 deletions

View File

@@ -9,13 +9,13 @@ 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;
use MailPoet\Services\Bridge\API;
use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\StatisticsBouncesRepository;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Tasks\Bounce as BounceTask;
use MailPoet\Tasks\Subscribers as TaskSubscribers;
use MailPoet\Tasks\Subscribers\BatchIterator;
use MailPoetVendor\Carbon\Carbon;
@@ -45,11 +45,15 @@ class Bounce extends SimpleWorker {
/** @var StatisticsBouncesRepository */
private $statisticsBouncesRepository;
/** @var ScheduledTaskSubscribersRepository */
private $scheduledTaskSubscribersRepository;
public function __construct(
SettingsController $settings,
SubscribersRepository $subscribersRepository,
SendingQueuesRepository $sendingQueuesRepository,
StatisticsBouncesRepository $statisticsBouncesRepository,
ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository,
Bridge $bridge
) {
$this->settings = $settings;
@@ -58,6 +62,7 @@ class Bounce extends SimpleWorker {
$this->subscribersRepository = $subscribersRepository;
$this->sendingQueuesRepository = $sendingQueuesRepository;
$this->statisticsBouncesRepository = $statisticsBouncesRepository;
$this->scheduledTaskSubscribersRepository = $scheduledTaskSubscribersRepository;
}
public function init() {
@@ -71,7 +76,7 @@ class Bounce extends SimpleWorker {
}
public function prepareTaskStrategy(ScheduledTaskEntity $task, $timer) {
BounceTask::prepareSubscribers($task);
$this->scheduledTaskSubscribersRepository->createSubscribersForBounceWorker($task);
if (!ScheduledTaskSubscriber::getUnprocessedCount($task->getId())) {
ScheduledTaskSubscriber::where('task_id', $task->getId())->deleteMany();

View File

@@ -106,6 +106,25 @@ class ScheduledTaskSubscribersRepository extends Repository {
$this->checkCompleted($task);
}
public function createSubscribersForBounceWorker(ScheduledTaskEntity $scheduledTaskEntity): void {
$scheduledTaskSubscribersTable = $this->entityManager->getClassMetadata(ScheduledTaskSubscriberEntity::class)->getTableName();
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
$stmt = $this->entityManager->getConnection()->prepare("
INSERT IGNORE INTO " . $scheduledTaskSubscribersTable . "
(task_id, subscriber_id, processed)
SELECT :taskId AS task_id, s.`id` AS subscriber_id, :unprocessed AS processed
FROM " . $subscribersTable . " s
WHERE s.`deleted_at` IS NULL
AND s.`status` IN (:subscribed, :unconfirmed)
");
$stmt->bindValue('taskId', $scheduledTaskEntity->getId());
$stmt->bindValue('unprocessed', ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED);
$stmt->bindValue('subscribed', SubscriberEntity::STATUS_SUBSCRIBED);
$stmt->bindValue('unconfirmed', SubscriberEntity::STATUS_UNCONFIRMED);
$stmt->executeQuery();
}
private function checkCompleted(ScheduledTaskEntity $task): void {
$count = $this->countBy(['task' => $task, 'processed' => ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED]);
if ($count === 0) {

View File

@@ -1,27 +0,0 @@
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
namespace MailPoet\Tasks;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Models\Subscriber;
class Bounce {
public static function prepareSubscribers(ScheduledTaskEntity $task) {
// Prepare subscribers on the DB side for performance reasons
Subscriber::rawExecute(
'INSERT IGNORE INTO ' . MP_SCHEDULED_TASK_SUBSCRIBERS_TABLE . '
(task_id, subscriber_id, processed)
SELECT ? as task_id, s.`id` as subscriber_id, ? as processed
FROM ' . MP_SUBSCRIBERS_TABLE . ' s
WHERE s.`deleted_at` IS NULL
AND s.`status` IN (?, ?)',
[
$task->getId(),
ScheduledTaskSubscriber::STATUS_UNPROCESSED,
Subscriber::STATUS_SUBSCRIBED,
Subscriber::STATUS_UNCONFIRMED,
]
);
}
}

View File

@@ -67,6 +67,7 @@ class BounceTest extends \MailPoetTest {
$this->subscribersRepository,
$this->diContainer->get(SendingQueuesRepository::class),
$this->diContainer->get(StatisticsBouncesRepository::class),
$this->diContainer->get(ScheduledTaskSubscribersRepository::class),
$this->diContainer->get(Bridge::class)
);
@@ -86,6 +87,7 @@ class BounceTest extends \MailPoetTest {
$this->subscribersRepository,
$this->diContainer->get(SendingQueuesRepository::class),
$this->diContainer->get(StatisticsBouncesRepository::class),
$this->diContainer->get(ScheduledTaskSubscribersRepository::class),
$this->diContainer->get(Bridge::class)
);
$worker->init();