Split integration subject to a service (Subject) and data (Payload)
[MAILPOET-4629]
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
6
mailpoet/lib/Automation/Engine/Workflows/Payload.php
Normal file
6
mailpoet/lib/Automation/Engine/Workflows/Payload.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace MailPoet\Automation\Engine\Workflows;
|
||||
|
||||
interface Payload {
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user