diff --git a/lib/Traits/CanLoadInitializers.php b/lib/Traits/CanLoadInitializers.php index 24509de..6d03717 100644 --- a/lib/Traits/CanLoadInitializers.php +++ b/lib/Traits/CanLoadInitializers.php @@ -21,6 +21,9 @@ use PHPNomad\Mutator\Interfaces\MutationStrategy; use PHPNomad\Rest\Interfaces\HasControllers; use PHPNomad\Rest\Interfaces\RestStrategy; +use PHPNomad\Tasks\Interfaces\HasTaskHandlers; +use PHPNomad\Tasks\Interfaces\Task; +use PHPNomad\Tasks\Interfaces\TaskStrategy; use PHPNomad\Update\Events\UpgradeRoutinesRequested; use PHPNomad\Update\Interfaces\HasUpdates; use PHPNomad\Utils\Helpers\Arr; @@ -30,11 +33,12 @@ trait CanLoadInitializers protected InstanceProvider $container; /** - * @var array[HasClassDefinitions|Loadable|HasLoadCondition|HasFacades|HasListeners|HasMutations|HasEventBindings] + * @var array[HasClassDefinitions|Loadable|HasLoadCondition|HasFacades|HasListeners|HasMutations|HasEventBindings|HasTaskHandlers] */ protected array $initializers = []; /** + * @return void * @throws LoaderException */ protected function loadInitializers() @@ -44,11 +48,6 @@ protected function loadInitializers() } } - /** - * @param HasClassDefinitions|Loadable|HasLoadCondition|HasFacades|HasListeners|HasMutations|HasEventBindings|HasControllers $initializer - * @return void - * @throws LoaderException - */ protected function loadInitializer($initializer): void { try { @@ -56,7 +55,6 @@ protected function loadInitializer($initializer): void $initializer->setContainer($this->container); } - // Bail early if this has a load condition preventing it from loading. if ($initializer instanceof HasLoadCondition && !$initializer->shouldLoad()) { return; } @@ -90,7 +88,6 @@ protected function loadInitializer($initializer): void } if ($initializer instanceof HasListeners) { - /** @var EventStrategy $instance */ $events = $this->container->get(EventStrategy::class); foreach ($initializer->getListeners() as $event => $handlers) { @@ -103,8 +100,19 @@ protected function loadInitializer($initializer): void } } + if ($initializer instanceof HasTaskHandlers) { + $strategy = $this->container->get(TaskStrategy::class); + + foreach ($initializer->getTaskHandlers() as $taskClass => $handlers) { + foreach (Arr::wrap($handlers) as $handlerClass) { + $strategy->attach($taskClass, fn(Task $task) => + $this->container->get($handlerClass)->handle($task) + ); + } + } + } + if ($initializer instanceof HasUpdates) { - /** @var EventStrategy $instance */ $events = $this->container->get(EventStrategy::class); $events->attach( @@ -140,4 +148,4 @@ protected function loadInitializer($initializer): void throw new LoaderException('Failed to load ' . get_class($initializer), 500, $e); } } -} \ No newline at end of file +}