Fetch workflow, workflow run, and step in workflow step runner
[MAILPOET-4136]
This commit is contained in:
@@ -3,8 +3,11 @@
|
|||||||
namespace MailPoet\Automation\Engine\Control;
|
namespace MailPoet\Automation\Engine\Control;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use MailPoet\Automation\Engine\Exceptions;
|
||||||
use MailPoet\Automation\Engine\Exceptions\InvalidStateException;
|
use MailPoet\Automation\Engine\Exceptions\InvalidStateException;
|
||||||
use MailPoet\Automation\Engine\Hooks;
|
use MailPoet\Automation\Engine\Hooks;
|
||||||
|
use MailPoet\Automation\Engine\Storage\WorkflowRunStorage;
|
||||||
|
use MailPoet\Automation\Engine\Storage\WorkflowStorage;
|
||||||
use MailPoet\Automation\Engine\WordPress;
|
use MailPoet\Automation\Engine\WordPress;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
@@ -12,10 +15,20 @@ class StepRunner {
|
|||||||
/** @var WordPress */
|
/** @var WordPress */
|
||||||
private $wordPress;
|
private $wordPress;
|
||||||
|
|
||||||
|
/** @var WorkflowRunStorage */
|
||||||
|
private $workflowRunStorage;
|
||||||
|
|
||||||
|
/** @var WorkflowStorage */
|
||||||
|
private $workflowStorage;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
WordPress $wordPress
|
WordPress $wordPress,
|
||||||
|
WorkflowRunStorage $workflowRunStorage,
|
||||||
|
WorkflowStorage $workflowStorage
|
||||||
) {
|
) {
|
||||||
$this->wordPress = $wordPress;
|
$this->wordPress = $wordPress;
|
||||||
|
$this->workflowRunStorage = $workflowRunStorage;
|
||||||
|
$this->workflowStorage = $workflowStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function initialize(): void {
|
public function initialize(): void {
|
||||||
@@ -43,6 +56,24 @@ class StepRunner {
|
|||||||
throw new InvalidStateException();
|
throw new InvalidStateException();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: process step
|
$workflowRunId = $args['workflow_run_id'];
|
||||||
|
$stepId = $args['step_id'];
|
||||||
|
|
||||||
|
$workflowRun = $this->workflowRunStorage->getWorkflowRun($workflowRunId);
|
||||||
|
if (!$workflowRun) {
|
||||||
|
throw Exceptions::workflowRunNotFound($workflowRunId);
|
||||||
|
}
|
||||||
|
|
||||||
|
$workflow = $this->workflowStorage->getWorkflow($workflowRun->getWorkflowId());
|
||||||
|
if (!$workflow) {
|
||||||
|
throw Exceptions::workflowNotFound($workflowRun->getWorkflowId());
|
||||||
|
}
|
||||||
|
|
||||||
|
$step = $workflow->getStep($stepId);
|
||||||
|
if (!$step) {
|
||||||
|
throw Exceptions::workflowStepNotFound($stepId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: process step based on its type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,9 @@ class Exceptions {
|
|||||||
private const DATABASE_ERROR = 'mailpoet_automation_database_error';
|
private const DATABASE_ERROR = 'mailpoet_automation_database_error';
|
||||||
private const API_METHOD_NOT_ALLOWED = 'mailpoet_automation_api_method_not_allowed';
|
private const API_METHOD_NOT_ALLOWED = 'mailpoet_automation_api_method_not_allowed';
|
||||||
private const API_NO_JSON_BODY = 'mailpoet_automation_api_no_json_body';
|
private const API_NO_JSON_BODY = 'mailpoet_automation_api_no_json_body';
|
||||||
|
private const WORKFLOW_NOT_FOUND = 'mailpoet_automation_workflow_not_found';
|
||||||
|
private const WORKFLOW_RUN_NOT_FOUND = 'mailpoet_automation_workflow_run_not_found';
|
||||||
|
private const WORKFLOW_STEP_NOT_FOUND = 'mailpoet_automation_workflow_step_not_found';
|
||||||
private const WORKFLOW_TRIGGER_NOT_FOUND = 'mailpoet_automation_workflow_trigger_not_found';
|
private const WORKFLOW_TRIGGER_NOT_FOUND = 'mailpoet_automation_workflow_trigger_not_found';
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
@@ -44,6 +47,24 @@ class Exceptions {
|
|||||||
->withMessage(__('No JSON body passed.', 'mailpoet'));
|
->withMessage(__('No JSON body passed.', 'mailpoet'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function workflowNotFound(int $id): NotFoundException {
|
||||||
|
return NotFoundException::create()
|
||||||
|
->withErrorCode(self::WORKFLOW_NOT_FOUND)
|
||||||
|
->withMessage(__(sprintf("Workflow with ID '%s' not found.", $id), 'mailpoet'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function workflowRunNotFound(int $id): NotFoundException {
|
||||||
|
return NotFoundException::create()
|
||||||
|
->withErrorCode(self::WORKFLOW_RUN_NOT_FOUND)
|
||||||
|
->withMessage(__(sprintf("Workflow run with ID '%s' not found.", $id), 'mailpoet'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function workflowStepNotFound(string $id): NotFoundException {
|
||||||
|
return NotFoundException::create()
|
||||||
|
->withErrorCode(self::WORKFLOW_STEP_NOT_FOUND)
|
||||||
|
->withMessage(__(sprintf("Workflow step with ID '%s' not found.", $id), 'mailpoet'));
|
||||||
|
}
|
||||||
|
|
||||||
public static function workflowTriggerNotFound(int $workflowId, string $key): NotFoundException {
|
public static function workflowTriggerNotFound(int $workflowId, string $key): NotFoundException {
|
||||||
return NotFoundException::create()
|
return NotFoundException::create()
|
||||||
->withErrorCode(self::WORKFLOW_TRIGGER_NOT_FOUND)
|
->withErrorCode(self::WORKFLOW_TRIGGER_NOT_FOUND)
|
||||||
|
@@ -26,4 +26,10 @@ class WorkflowRunStorage {
|
|||||||
}
|
}
|
||||||
return $this->wpdb->insert_id;
|
return $this->wpdb->insert_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getWorkflowRun(int $id): ?WorkflowRun {
|
||||||
|
$query = strval($this->wpdb->prepare("SELECT * FROM $this->table WHERE id = %d", $id));
|
||||||
|
$data = $this->wpdb->get_row($query, ARRAY_A);
|
||||||
|
return $data ? WorkflowRun::fromArray((array)$data) : null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,6 +28,12 @@ class WorkflowStorage {
|
|||||||
return $this->wpdb->insert_id;
|
return $this->wpdb->insert_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getWorkflow(int $id): ?Workflow {
|
||||||
|
$query = strval($this->wpdb->prepare("SELECT * FROM $this->table WHERE id = %d", $id));
|
||||||
|
$data = $this->wpdb->get_row($query, ARRAY_A);
|
||||||
|
return $data ? Workflow::fromArray((array)$data) : null;
|
||||||
|
}
|
||||||
|
|
||||||
/** @return string[] */
|
/** @return string[] */
|
||||||
public function getActiveTriggerKeys(): array {
|
public function getActiveTriggerKeys(): array {
|
||||||
$query = strval(
|
$query = strval(
|
||||||
|
Reference in New Issue
Block a user