From c23fa17b274663e359e919db8546a9496afcd3cc Mon Sep 17 00:00:00 2001 From: Mohammad Alavi Date: Sun, 19 Jan 2025 23:07:09 +0330 Subject: [PATCH] feat: update service provider generation --- .../Commands/ContainerApiGenerator.php | 46 ++++--------------- src/Generator/Commands/ContainerGenerator.php | 6 --- .../Commands/ContainerWebGenerator.php | 6 +-- .../Commands/ServiceProviderGenerator.php | 38 ++------------- .../event-service-provider-with-listener.stub | 11 ----- ...vider.stub => event-service-provider.stub} | 0 ...-service-provider-with-event-provider.stub | 16 ------- .../providers/main-service-provider.stub | 16 ------- .../middleware-service-provider.stub | 17 ------- .../{generic.stub => service-provider.stub} | 4 +- 10 files changed, 17 insertions(+), 143 deletions(-) delete mode 100644 src/Generator/Stubs/providers/event-service-provider-with-listener.stub rename src/Generator/Stubs/providers/{generic-event-service-provider.stub => event-service-provider.stub} (100%) delete mode 100644 src/Generator/Stubs/providers/main-service-provider-with-event-provider.stub delete mode 100644 src/Generator/Stubs/providers/main-service-provider.stub delete mode 100644 src/Generator/Stubs/providers/middleware-service-provider.stub rename src/Generator/Stubs/providers/{generic.stub => service-provider.stub} (59%) diff --git a/src/Generator/Commands/ContainerApiGenerator.php b/src/Generator/Commands/ContainerApiGenerator.php index db631469d..5f5137db6 100644 --- a/src/Generator/Commands/ContainerApiGenerator.php +++ b/src/Generator/Commands/ContainerApiGenerator.php @@ -21,7 +21,6 @@ final class ContainerApiGenerator extends Generator implements ComponentsGenerat ['controllertype', null, InputOption::VALUE_OPTIONAL, 'The controller type (SAC, MAC)'], ['events', null, InputOption::VALUE_OPTIONAL, 'Generate Events for this Container?'], ['listeners', null, InputOption::VALUE_OPTIONAL, 'Generate Event Listeners for Events of this Container?'], - ['register-listeners', null, InputOption::VALUE_OPTIONAL, 'Register the Event Listeners in the EventServiceProvider?'], ['tests', null, InputOption::VALUE_OPTIONAL, 'Generate Tests for this Container?'], ['maincalled', false, InputOption::VALUE_NONE], ]; @@ -126,12 +125,8 @@ public function getUserInputs(): array|null $generateEvents = $this->checkParameterOrConfirm('events', 'Do you want to generate the corresponding CRUD Events for this Container?', false); $generateListeners = false; - $registerListeners = false; if ($generateEvents) { $generateListeners = $this->checkParameterOrConfirm('listeners', 'Do you want to generate the corresponding Event Listeners for this Events?', false); - if ($generateListeners) { - $registerListeners = $this->checkParameterOrConfirm('register-listeners', 'Do you want the Event Listeners to be registered in the EventServiceProvider?', true); - } } $generateTests = $this->checkParameterOrConfirm('tests', 'Do you want to generate the corresponding Tests for this Container?', true); @@ -381,12 +376,10 @@ public function getUserInputs(): array|null } if ($generateEvents) { - $listeners = []; if ($generateListeners) { $this->printInfoMessage('Generating Event Listeners'); foreach ($events as $event) { $listener = $event . 'Listener'; - $listeners[$listener] = [$event]; $this->call('apiato:make:listener', [ '--section' => $this->sectionName, '--container' => $this->containerName, @@ -395,39 +388,16 @@ public function getUserInputs(): array|null ]); } } - - $stub = 'generic-event-service-provider'; - if ($generateListeners && $registerListeners) { - $stub = 'event-service-provider-with-listener'; - } - - $this->printInfoMessage('Generating EventServiceProvider'); - $this->call('apiato:make:provider', [ - '--section' => $sectionName, - '--container' => $containerName, - '--file' => 'EventServiceProvider', - '--stub' => $stub, - '--event-listeners' => $listeners, - ]); - - $this->printInfoMessage('Generating MainServiceProvider'); - $this->call('apiato:make:provider', [ - '--section' => $sectionName, - '--container' => $containerName, - '--file' => 'MainServiceProvider', - '--stub' => 'main-service-provider-with-event-provider', - '--event-service-provider' => 'EventServiceProvider', - ]); - } else { - $this->printInfoMessage('Generating MainServiceProvider'); - $this->call('apiato:make:provider', [ - '--section' => $sectionName, - '--container' => $containerName, - '--file' => 'MainServiceProvider', - '--stub' => 'main-service-provider', - ]); } + $this->printInfoMessage('Generating ServiceProvider'); + $this->call('apiato:make:provider', [ + '--section' => $sectionName, + '--container' => $containerName, + '--file' => Str::title($this->containerName) . 'ServiceProvider', + '--stub' => 'service-provider', + ]); + $generateComposerFile = [ 'path-parameters' => [ 'section-name' => $this->sectionName, diff --git a/src/Generator/Commands/ContainerGenerator.php b/src/Generator/Commands/ContainerGenerator.php index 8b0dcbbf9..b545bacc7 100644 --- a/src/Generator/Commands/ContainerGenerator.php +++ b/src/Generator/Commands/ContainerGenerator.php @@ -17,7 +17,6 @@ final class ContainerGenerator extends Generator implements ComponentsGenerator ['ui', null, InputOption::VALUE_OPTIONAL, 'The user-interface to generate the Controller for.'], ['events', null, InputOption::VALUE_OPTIONAL, 'Generate Events for this Container?'], ['listeners', null, InputOption::VALUE_OPTIONAL, 'Generate Event Listeners for Events of this Container?'], - ['register-listeners', null, InputOption::VALUE_OPTIONAL, 'Register the Event Listeners in the EventServiceProvider?'], ['tests', null, InputOption::VALUE_OPTIONAL, 'Generate Tests for this Container?'], ]; /** @@ -54,12 +53,8 @@ public function getUserInputs(): array|null $ui = Str::lower($this->checkParameterOrChoice('ui', 'Select the UI for this container', ['API', 'WEB', 'BOTH'], 0)); $generateEvents = $this->checkParameterOrConfirm('events', 'Do you want to generate the corresponding CRUD Events for this Container?', false); $generateListeners = false; - $registerListeners = false; if ($generateEvents) { $generateListeners = $this->checkParameterOrConfirm('listeners', 'Do you want to generate the corresponding Event Listeners for this Events?', false); - if ($generateListeners) { - $registerListeners = $this->checkParameterOrConfirm('register-listeners', 'Do you want the Event Listeners to be registered in the EventServiceProvider?', true); - } } $generateTests = $this->checkParameterOrConfirm('tests', 'Do you want to generate the corresponding Tests for this Container?', true); if ($generateTests) { @@ -119,7 +114,6 @@ public function getUserInputs(): array|null '--file' => 'composer', '--events' => $generateEvents, '--listeners' => $generateListeners, - '--register-listeners' => $registerListeners, '--tests' => $generateTests, '--maincalled' => true, ]); diff --git a/src/Generator/Commands/ContainerWebGenerator.php b/src/Generator/Commands/ContainerWebGenerator.php index 44615a2ad..a5eebe9f7 100644 --- a/src/Generator/Commands/ContainerWebGenerator.php +++ b/src/Generator/Commands/ContainerWebGenerator.php @@ -75,12 +75,12 @@ public function getUserInputs(): array|null '--file' => Str::camel($this->sectionName) . '-' . Str::camel($this->containerName), ]); - $this->printInfoMessage('Generating MainServiceProvider'); + $this->printInfoMessage('Generating ServiceProvider'); $this->call('apiato:make:provider', [ '--section' => $sectionName, '--container' => $containerName, - '--file' => 'MainServiceProvider', - '--stub' => 'main-service-provider', + '--file' => Str::title($this->containerName) . 'ServiceProvider', + '--stub' => 'service-provider', ]); $this->printInfoMessage('Generating Model and Repository'); diff --git a/src/Generator/Commands/ServiceProviderGenerator.php b/src/Generator/Commands/ServiceProviderGenerator.php index 35da7495d..e580eb6b6 100644 --- a/src/Generator/Commands/ServiceProviderGenerator.php +++ b/src/Generator/Commands/ServiceProviderGenerator.php @@ -15,8 +15,6 @@ final class ServiceProviderGenerator extends Generator implements ComponentsGene */ public array $inputs = [ ['stub', null, InputOption::VALUE_OPTIONAL, 'The stub file to load for this generator.'], - ['event-listeners', null, InputOption::VALUE_OPTIONAL, 'The Event Listeners that this Provider should register.'], - ['event-service-provider', null, InputOption::VALUE_OPTIONAL, 'The Event Service Provider that this Provider should register.'], ]; /** * The console command name. @@ -47,48 +45,23 @@ final class ServiceProviderGenerator extends Generator implements ComponentsGene */ protected string $stubName = 'providers/generic.stub'; - private const TAB2 = ' '; - private const TAB3 = ' '; - public function getUserInputs(): array|null { $stub = $this->option('stub'); - $eventServiceProvider = $this->option('event-service-provider'); if (!$stub) { $stub = $this->checkParameterOrChoice( 'stub', 'Select the Stub you want to load', - ['Generic', 'MainServiceProvider', 'EventServiceProvider', 'MiddlewareServiceProvider'], + ['ServiceProvider', 'EventServiceProvider'], 0, ); $stub = match ($stub) { - 'MainServiceProvider' => 'main-service-provider', - 'EventServiceProvider' => 'generic-event-service-provider', - 'MiddlewareServiceProvide' => 'middleware-service-provider', - default => 'generic', + 'EventServiceProvider' => 'event-service-provider', + default => 'service-provider', }; } $this->stubName = "providers/$stub.stub"; - $eventListeners = $this->option('event-listeners'); - $eventListenersString = '[]'; - $listenersUseStatements = ''; - $eventsUseStatements = ''; - if ($eventListeners) { - $listenersWithClass = array_map(static fn ($listeners, $listener) => [$listener . '::class' => array_map(static fn ($event): string => $event . '::class', $listeners)], $eventListeners, array_keys($eventListeners)); - $eventListenersString = '[' . PHP_EOL . array_reduce($listenersWithClass, static fn ($carry, $item): string => $carry . array_reduce(array_keys($item), static function ($carry, string $key) use ($item): string { - $carry .= self::TAB2 . $key . ' => [' . PHP_EOL; - $carry .= array_reduce($item[$key], static fn ($carry, $event): string => $carry . (self::TAB3 . $event . ',' . PHP_EOL)); - - return $carry . (self::TAB2 . '],' . PHP_EOL); - })) . ' ]'; - $listenersUseStatements = array_reduce(array_keys($eventListeners), fn ($carry, $item): string => $carry . ('use App\Containers\\' . $this->sectionName . '\\' . $this->containerName . '\Listeners\\' . $item . ';' . PHP_EOL)); - - $eventsUseStatements = array_map(fn ($listeners, $listener): array => array_map(fn ($event): string => 'use App\Containers\\' . $this->sectionName . '\\' . $this->containerName . '\Events\\' . $event . ';', $listeners), $eventListeners, array_keys($eventListeners)); - $eventsUseStatements = array_reduce($eventsUseStatements, static fn ($carry, $item): string => $carry . array_reduce(array_keys($item), static fn ($carry, $key): string => $carry . ($item[$key] . PHP_EOL))); - } - - $useStatements = $eventsUseStatements . $listenersUseStatements; return [ 'path-parameters' => [ @@ -101,9 +74,6 @@ public function getUserInputs(): array|null '_container-name' => Str::lower($this->containerName), 'container-name' => $this->containerName, 'class-name' => $this->fileName, - 'event-listeners' => $eventListenersString, - 'use-statements' => $useStatements, - 'event-service-provider' => $eventServiceProvider, ], 'file-parameters' => [ 'file-name' => $this->fileName, @@ -116,6 +86,6 @@ public function getUserInputs(): array|null */ public function getDefaultFileName(): string { - return 'MainServiceProvider'; + return 'ServiceProvider'; } } diff --git a/src/Generator/Stubs/providers/event-service-provider-with-listener.stub b/src/Generator/Stubs/providers/event-service-provider-with-listener.stub deleted file mode 100644 index aa95fd0a4..000000000 --- a/src/Generator/Stubs/providers/event-service-provider-with-listener.stub +++ /dev/null @@ -1,11 +0,0 @@ -