From ea92e0de8d3dc69824cdd23d1d93490e7d50ada3 Mon Sep 17 00:00:00 2001 From: Dave M Date: Tue, 15 Jul 2025 12:49:56 +0000 Subject: [PATCH] - WIP on Middleware to allows only one launch from a task which could be called at least twice due to having multiple cron attached to --- src/CronardMiddleware.php | 2 +- src/CronardTrait.php | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/CronardMiddleware.php b/src/CronardMiddleware.php index f3d8396..3f70099 100644 --- a/src/CronardMiddleware.php +++ b/src/CronardMiddleware.php @@ -32,7 +32,7 @@ class CronardMiddleware implements MiddlewareInterface { if ( $this->cronKey === ( $request->getQueryParams()['cronkey'] ?? false ) ) { $response = $this->response->call($this); - + $this->launch([ $request, $response, diff --git a/src/CronardTrait.php b/src/CronardTrait.php index efbaf1b..a1e8216 100644 --- a/src/CronardTrait.php +++ b/src/CronardTrait.php @@ -41,17 +41,26 @@ trait CronardTrait { public function fromAnnotations(TaskFetcher $fetcher) : self { - $tasks = []; + $launched = []; foreach($fetcher->compile() as $task) { $this->crontabs[] = [ 'cron' => $task['annotation']->cron, - 'callback' => function(ServerRequestInterface $request, ResponseInterface $response, ContainerInterface $container) use ($task) { + 'callback' => function(ServerRequestInterface $request, ResponseInterface $response, ContainerInterface $container) use ($task, & $launched) { if ( $task['annotation']->method ?? false ) { $request = $request->withMethod($task['annotation']->method); } - return $container->make($task['class'])->{$task['method']}($request->withAttribute('lean.cronard', $task['annotation']), []); + $uid = sprintf("%s::%s", $task['class'], $task['method']); + + if ( empty($launched[$uid]) ) { + $launched[$uid] = true; + + return $container->make($task['class'])->{$task['method']}($request->withAttribute('lean.cronard', $task['annotation']), []); + } + else { + return null; + } } ]; }