Move automation completion to step scheduler

[MAILPOET-5569]
This commit is contained in:
Jan Jakes
2023-08-17 15:31:10 +02:00
committed by Aschepikov
parent b7ef250511
commit e3da509f70
2 changed files with 14 additions and 15 deletions

View File

@@ -181,20 +181,11 @@ class StepHandler {
throw new InvalidStateException();
}
// next step scheduled by action
if ($this->stepScheduler->hasScheduledNextStep($args)) {
return;
}
// no need to schedule a new step if no next step exists
if (count($stepData->getNextSteps()) === 0) {
$this->automationRunStorage->updateNextStep($args->getAutomationRun()->getId(), null);
$this->automationRunStorage->updateStatus($automationRunId, AutomationRun::STATUS_COMPLETE);
return;
}
// enqueue next step
// schedule next step if not scheduled by action
if (!$this->stepScheduler->hasScheduledNextStep($args)) {
$this->stepScheduler->scheduleNextStep($args);
}
// TODO: allow long-running steps (that are not done here yet)
}

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Automation\Engine\Control;
use MailPoet\Automation\Engine\Data\AutomationRun;
use MailPoet\Automation\Engine\Data\StepRunArgs;
use MailPoet\Automation\Engine\Hooks;
use MailPoet\Automation\Engine\Storage\AutomationRunStorage;
@@ -23,8 +24,15 @@ class StepScheduler {
public function scheduleNextStep(StepRunArgs $args, int $timestamp = null): int {
$runId = $args->getAutomationRun()->getId();
$nextStep = $args->getStep()->getNextSteps()[0] ?? null;
$nextStepId = $nextStep ? $nextStep->getId() : null;
// complete the automation run if there are no more steps
if (count($args->getStep()->getNextSteps()) === 0) {
$this->automationRunStorage->updateNextStep($runId, null);
$this->automationRunStorage->updateStatus($runId, AutomationRun::STATUS_COMPLETE);
return 0;
}
$nextStepId = $args->getStep()->getNextSteps()[0]->getId();
$data = $this->getActionData($runId, $nextStepId);
$id = $this->scheduleStepAction($data, $timestamp);
$this->automationRunStorage->updateNextStep($runId, $nextStepId);
@@ -49,7 +57,7 @@ class StepScheduler {
: $this->actionScheduler->schedule($timestamp, Hooks::AUTOMATION_STEP, $data);
}
private function getActionData(int $runId, ?string $stepId): array {
private function getActionData(int $runId, string $stepId): array {
return [
[
'automation_run_id' => $runId,