Rewrite SendingErrorHandler using Doctrine

[MAILPOET-5682]
This commit is contained in:
Jan Jakes
2023-10-27 14:29:20 +02:00
committed by Jan Jakeš
parent 7e45fb1c79
commit fa266dadcd
3 changed files with 12 additions and 27 deletions

View File

@ -2,30 +2,36 @@
namespace MailPoet\Cron\Workers\SendingQueue; namespace MailPoet\Cron\Workers\SendingQueue;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Mailer\MailerError; use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\MailerLog; use MailPoet\Mailer\MailerLog;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
class SendingErrorHandler { class SendingErrorHandler {
/** @var ScheduledTaskSubscribersRepository */
private $scheduledTaskSubscribersRepository;
/** @var SendingThrottlingHandler */ /** @var SendingThrottlingHandler */
private $throttlingHandler; private $throttlingHandler;
public function __construct( public function __construct(
ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository,
SendingThrottlingHandler $throttlingHandler SendingThrottlingHandler $throttlingHandler
) { ) {
$this->scheduledTaskSubscribersRepository = $scheduledTaskSubscribersRepository;
$this->throttlingHandler = $throttlingHandler; $this->throttlingHandler = $throttlingHandler;
} }
public function processError( public function processError(
MailerError $error, MailerError $error,
SendingTask $sendingTask, ScheduledTaskEntity $task,
array $preparedSubscribersIds, array $preparedSubscribersIds,
array $preparedSubscribers array $preparedSubscribers
) { ) {
if ($error->getLevel() === MailerError::LEVEL_HARD) { if ($error->getLevel() === MailerError::LEVEL_HARD) {
return $this->processHardError($error); return $this->processHardError($error);
} }
$this->processSoftError($error, $sendingTask, $preparedSubscribersIds, $preparedSubscribers); $this->processSoftError($error, $task, $preparedSubscribersIds, $preparedSubscribers);
} }
private function processHardError(MailerError $error) { private function processHardError(MailerError $error) {
@ -40,11 +46,11 @@ class SendingErrorHandler {
} }
} }
private function processSoftError(MailerError $error, SendingTask $sendingTask, $preparedSubscribersIds, $preparedSubscribers) { private function processSoftError(MailerError $error, ScheduledTaskEntity $task, $preparedSubscribersIds, $preparedSubscribers) {
foreach ($error->getSubscriberErrors() as $subscriberError) { foreach ($error->getSubscriberErrors() as $subscriberError) {
$subscriberIdIndex = array_search($subscriberError->getEmail(), $preparedSubscribers); $subscriberIdIndex = array_search($subscriberError->getEmail(), $preparedSubscribers);
$message = $subscriberError->getMessage() ?: $error->getMessage(); $message = $subscriberError->getMessage() ?: $error->getMessage();
$sendingTask->saveSubscriberError($preparedSubscribersIds[$subscriberIdIndex], $message); $this->scheduledTaskSubscribersRepository->saveError($task, $preparedSubscribersIds[$subscriberIdIndex], $message ?? '');
} }
} }
} }

View File

@ -508,11 +508,7 @@ class SendingQueue {
// log error message and schedule retry/pause sending // log error message and schedule retry/pause sending
if ($sendResult['response'] === false) { if ($sendResult['response'] === false) {
$error = $sendResult['error']; $error = $sendResult['error'];
$legacyTask = ScheduledTask::findOne($task->getId()); $this->errorHandler->processError($error, $task, $preparedSubscribersIds, $preparedSubscribers);
$legacyQueue = $legacyTask ? SendingTask::createFromScheduledTask($legacyTask) : null;
if ($legacyQueue) {
$this->errorHandler->processError($error, $legacyQueue, $preparedSubscribersIds, $preparedSubscribers);
}
} else { } else {
$queue = $task->getSendingQueue(); $queue = $task->getSendingQueue();
if (!$queue) { if (!$queue) {

View File

@ -279,23 +279,6 @@ class Sending {
return $this->updateCount(count($processedSubscribers))->getErrors() === false; return $this->updateCount(count($processedSubscribers))->getErrors() === false;
} }
public function saveSubscriberError($subcriberId, $errorMessage) {
$this->scheduledTaskSubscribersRepository->saveError($this->scheduledTaskEntity, $subcriberId, $errorMessage);
$this->updateTaskStatus();
return $this->updateCount()->getErrors() === false;
}
private function updateTaskStatus() {
// we need to update those fields here as the Sending class is in a mixed state using Paris and Doctrine at the same time
// this probably won't be necessary anymore once https://mailpoet.atlassian.net/browse/MAILPOET-4375 is finished
$this->task->status = $this->scheduledTaskEntity->getStatus();
if (!is_null($this->scheduledTaskEntity->getProcessedAt())) {
$this->task->processedAt = $this->scheduledTaskEntity->getProcessedAt()->format('Y-m-d H:i:s');
}
}
public function updateCount(?int $count = null) { public function updateCount(?int $count = null) {
if ($count) { if ($count) {
// increment/decrement counts based on known subscriber count, don't exceed the bounds // increment/decrement counts based on known subscriber count, don't exceed the bounds