Introduce subject entry to carry subject & payload data
[MAILPOET-4629]
This commit is contained in:
@@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
namespace MailPoet\Automation\Engine\Control;
|
namespace MailPoet\Automation\Engine\Control;
|
||||||
|
|
||||||
|
use MailPoet\Automation\Engine\Data\Subject as SubjectData;
|
||||||
|
use MailPoet\Automation\Engine\Data\SubjectEntry;
|
||||||
use MailPoet\Automation\Engine\Exceptions;
|
use MailPoet\Automation\Engine\Exceptions;
|
||||||
use MailPoet\Automation\Engine\Registry;
|
use MailPoet\Automation\Engine\Registry;
|
||||||
|
use MailPoet\Automation\Engine\Workflows\Payload;
|
||||||
use MailPoet\Automation\Engine\Workflows\Subject;
|
use MailPoet\Automation\Engine\Workflows\Subject;
|
||||||
use Throwable;
|
|
||||||
|
|
||||||
class SubjectLoader {
|
class SubjectLoader {
|
||||||
/** @var Registry */
|
/** @var Registry */
|
||||||
@@ -17,17 +19,28 @@ class SubjectLoader {
|
|||||||
$this->registry = $registry;
|
$this->registry = $registry;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadSubject(string $key, array $args): Subject {
|
/**
|
||||||
|
* @param SubjectData[] $subjectData
|
||||||
|
* @return SubjectEntry<Subject<Payload>>[]
|
||||||
|
*/
|
||||||
|
public function getSubjectsEntries(array $subjectData): array {
|
||||||
|
$subjectEntries = [];
|
||||||
|
foreach ($subjectData as $data) {
|
||||||
|
$subjectEntries[] = $this->getSubjectEntry($data);
|
||||||
|
}
|
||||||
|
return $subjectEntries;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param SubjectData $subjectData
|
||||||
|
* @return SubjectEntry<Subject<Payload>>
|
||||||
|
*/
|
||||||
|
public function getSubjectEntry(SubjectData $subjectData): SubjectEntry {
|
||||||
|
$key = $subjectData->getKey();
|
||||||
$subject = $this->registry->getSubject($key);
|
$subject = $this->registry->getSubject($key);
|
||||||
if (!$subject) {
|
if (!$subject) {
|
||||||
throw Exceptions::subjectNotFound($key);
|
throw Exceptions::subjectNotFound($key);
|
||||||
}
|
}
|
||||||
|
return new SubjectEntry($subject, $subjectData);
|
||||||
try {
|
|
||||||
$subject->load($args);
|
|
||||||
} catch (Throwable $e) {
|
|
||||||
throw Exceptions::subjectLoadFailed($key, $args);
|
|
||||||
}
|
|
||||||
return $subject;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
49
mailpoet/lib/Automation/Engine/Data/SubjectEntry.php
Normal file
49
mailpoet/lib/Automation/Engine/Data/SubjectEntry.php
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?php declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace MailPoet\Automation\Engine\Data;
|
||||||
|
|
||||||
|
use MailPoet\Automation\Engine\Data\Subject as SubjectData;
|
||||||
|
use MailPoet\Automation\Engine\Exceptions;
|
||||||
|
use MailPoet\Automation\Engine\Workflows\Payload;
|
||||||
|
use MailPoet\Automation\Engine\Workflows\Subject;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template-covariant S of Subject<Payload>
|
||||||
|
*/
|
||||||
|
class SubjectEntry {
|
||||||
|
/** @var S */
|
||||||
|
private $subject;
|
||||||
|
|
||||||
|
/** @var SubjectData */
|
||||||
|
private $subjectData;
|
||||||
|
|
||||||
|
/** @var Payload|null */
|
||||||
|
private $payloadCache;
|
||||||
|
|
||||||
|
/** @param S $subject */
|
||||||
|
public function __construct(
|
||||||
|
Subject $subject,
|
||||||
|
SubjectData $subjectData
|
||||||
|
) {
|
||||||
|
$this->subject = $subject;
|
||||||
|
$this->subjectData = $subjectData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return S */
|
||||||
|
public function getSubject(): Subject {
|
||||||
|
return $this->subject;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return Payload */
|
||||||
|
public function getPayload() {
|
||||||
|
if ($this->payloadCache === null) {
|
||||||
|
try {
|
||||||
|
$this->payloadCache = $this->subject->getPayload($this->subjectData);
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
throw Exceptions::subjectLoadFailed($this->subject->getKey(), $this->subjectData->getArgs());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this->payloadCache;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user