diff --git a/config/services/controller.yaml b/config/services/controller.yaml index 6510a6a..caab164 100644 --- a/config/services/controller.yaml +++ b/config/services/controller.yaml @@ -14,5 +14,6 @@ services: $processExecutionRepository: '@cleverage_ui_process.repository.process_execution' $intlFormatter: '@EasyCorp\Bundle\EasyAdminBundle\Intl\IntlFormatter' $translator: '@translator' + $processManager: '@cleverage_process.manager.process' tags: - { name: 'controller.service_arguments' } diff --git a/docs/index.md b/docs/index.md index b968e86..71780d7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -75,9 +75,9 @@ That's all, now you can launch a process via http post request ```bash curl --location 'http://localhost/http/process/execute' \ --header 'Authorization: Bearer myBearerToken' \ ---form 'input=@"/path/to/your/file.csv"' \ ---form 'code="demo.dummy"' \ ---form 'context="{\"foo\": \"bar\"}"' +--form 'code="demo.upload_and_run"' \ +--form 'input="/path/to/your/file.csv"' \ +--form 'context="{\"foo\": \"bar\", \"delimiter\": \";\"}"' ``` ```bash @@ -91,10 +91,18 @@ curl --location 'http://localhost/http/process/execute' \ }' ``` +```bash +curl --location 'http://localhost/http/process/execute' \ +--header 'Authorization: Bearer myBearerToken' \ +--form 'code="demo.dummy"' \ +--form 'queue="false"' +``` + * Query string code parameter must be a valid process code * Header Authorization: Bearer is the previously generated token * input could be string or file representation -* context you can pass multiple context values +* you can pass multiple context values +* queue define if the process should be queued (default) or directly run ### Scheduler diff --git a/src/Controller/ProcessExecuteController.php b/src/Controller/ProcessExecuteController.php index 21c351b..dc36f94 100644 --- a/src/Controller/ProcessExecuteController.php +++ b/src/Controller/ProcessExecuteController.php @@ -13,10 +13,12 @@ namespace CleverAge\UiProcessBundle\Controller; +use CleverAge\ProcessBundle\Manager\ProcessManager; use CleverAge\UiProcessBundle\Http\Model\HttpProcessExecution; use CleverAge\UiProcessBundle\Message\ProcessExecuteMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Attribute\ValueResolver; use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException; use Symfony\Component\Messenger\MessageBusInterface; @@ -30,6 +32,7 @@ public function __invoke( #[ValueResolver('http_process_execution')] HttpProcessExecution $httpProcessExecution, ValidatorInterface $validator, MessageBusInterface $bus, + ProcessManager $processManager, ): JsonResponse { $violations = $validator->validate($httpProcessExecution); if ($violations->count() > 0) { @@ -39,16 +42,32 @@ public function __invoke( } throw new UnprocessableEntityHttpException(implode('. ', $violationsMessages)); } - $bus->dispatch( - new ProcessExecuteMessage( - $httpProcessExecution->code ?? '', - $httpProcessExecution->input, - \is_string($httpProcessExecution->context) - ? json_decode($httpProcessExecution->context, true) - : $httpProcessExecution->context - ) - ); + if ($httpProcessExecution->queue) { + $bus->dispatch( + new ProcessExecuteMessage( + $httpProcessExecution->code ?? '', + $httpProcessExecution->input, + \is_string($httpProcessExecution->context) + ? json_decode($httpProcessExecution->context, true) + : $httpProcessExecution->context + ) + ); - return new JsonResponse('Process has been added to queue. It will start as soon as possible.'); + return new JsonResponse('Process has been added to queue. It will start as soon as possible.'); + } else { + try { + $processManager->execute( + $httpProcessExecution->code ?? '', + $httpProcessExecution->input, + \is_string($httpProcessExecution->context) + ? json_decode($httpProcessExecution->context, true) + : $httpProcessExecution->context + ); + } catch (\Throwable $e) { + return new JsonResponse($e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR); + } + + return new JsonResponse('Process has been proceed well.'); + } } } diff --git a/src/Http/Model/HttpProcessExecution.php b/src/Http/Model/HttpProcessExecution.php index fd9f62b..3c78a4a 100644 --- a/src/Http/Model/HttpProcessExecution.php +++ b/src/Http/Model/HttpProcessExecution.php @@ -23,7 +23,7 @@ final readonly class HttpProcessExecution { /** - * @param array $context + * @param string|array $context */ public function __construct( #[Sequentially(constraints: [new NotNull(message: 'Process code is required.'), new IsValidProcessCode()])] @@ -31,6 +31,7 @@ public function __construct( public ?string $input = null, #[AtLeastOneOf(constraints: [new Json(), new Type('array')])] public string|array $context = [], + public bool $queue = true, ) { } } diff --git a/src/Http/ValueResolver/HttpProcessExecuteValueResolver.php b/src/Http/ValueResolver/HttpProcessExecuteValueResolver.php index 411f0cc..31ee50a 100644 --- a/src/Http/ValueResolver/HttpProcessExecuteValueResolver.php +++ b/src/Http/ValueResolver/HttpProcessExecuteValueResolver.php @@ -52,7 +52,8 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable $httpProcessExecution = new HttpProcessExecution( $request->get('code'), $input, - $request->get('context', []) + $request->get('context', []), + $request->request->getBoolean('queue', true), ); }