Split integration subject to a service (Subject) and data (Payload)

[MAILPOET-4629]
This commit is contained in:
Jan Jakes
2022-09-19 13:28:45 +02:00
committed by David Remer
parent 757f1dc01a
commit e38e79f385
3 changed files with 21 additions and 6 deletions

View File

@@ -4,6 +4,7 @@ namespace MailPoet\Automation\Engine;
use MailPoet\Automation\Engine\Control\RootStep;
use MailPoet\Automation\Engine\Workflows\Action;
use MailPoet\Automation\Engine\Workflows\Payload;
use MailPoet\Automation\Engine\Workflows\Step;
use MailPoet\Automation\Engine\Workflows\Subject;
use MailPoet\Automation\Engine\Workflows\Trigger;
@@ -12,7 +13,7 @@ class Registry {
/** @var array<string, Step> */
private $steps = [];
/** @var array<string, Subject> */
/** @var array<string, Subject<Payload>> */
private $subjects = [];
/** @var array<string, Trigger> */
@@ -32,6 +33,7 @@ class Registry {
$this->steps[$rootStep->getKey()] = $rootStep;
}
/** @param Subject<Payload> $subject */
public function addSubject(Subject $subject): void {
$key = $subject->getKey();
if (isset($this->subjects[$key])) {
@@ -40,11 +42,12 @@ class Registry {
$this->subjects[$key] = $subject;
}
/** @return Subject<Payload>|null */
public function getSubject(string $key): ?Subject {
return $this->subjects[$key] ?? null;
}
/** @return array<string, Subject> */
/** @return array<string, Subject<Payload>> */
public function getSubjects(): array {
return $this->subjects;
}

View File

@@ -0,0 +1,6 @@
<?php declare(strict_types = 1);
namespace MailPoet\Automation\Engine\Workflows;
interface Payload {
}

View File

@@ -2,13 +2,19 @@
namespace MailPoet\Automation\Engine\Workflows;
use MailPoet\Automation\Engine\Data\Subject as SubjectData;
use MailPoet\Validator\Schema\ObjectSchema;
/**
* @template-covariant T of Payload
*/
interface Subject {
public function getKey(): string;
/** array<SubjectField> */
public function getFields(): array;
public function getName(): string;
public function load(array $args): void;
public function getArgsSchema(): ObjectSchema;
public function pack(): array;
/** @return T */
public function getPayload(SubjectData $subjectData): Payload;
}