files = $files; } public function handle(): void { $name = Str::studly($this->argument("name")); $hasSpecificOption = $this->option("model") || $this->option("service") || $this->option("controller") || $this->option("request") || $this->option("resource") || $this->option("route") || $this->option("migration"); $createAll = !$hasSpecificOption || $this->option("all"); $this->info("Creating CRUD for: {$name}"); $this->newLine(); if ($createAll || $this->option("model")) { $this->createModel($name); } if ($createAll || $this->option("service")) { $this->createService($name); } if ($createAll || $this->option("controller")) { $this->createController($name); } if ($createAll || $this->option("request")) { $this->createRequest($name); } if ($createAll || $this->option("resource")) { $this->createResource($name); } if ($createAll || $this->option("route")) { $this->createRoute($name); } if ($createAll || $this->option("migration")) { $this->createMigration($name); } $this->newLine(); $this->info("✓ CRUD operations created successfully!"); if ($createAll) { $this->newLine(); $this->info("Next steps:"); $this->info( "1. Update the migration: database/migrations/*_create_{$this->getTableName( $name, )}_table.php", ); $this->info( "2. Update the model properties in: app/Models/{$name}.php", ); $this->info( "3. Update validation rules in: app/Http/Requests/{$name}Request.php", ); $this->info( "4. Update resource fields in: app/Http/Resources/{$name}Resource.php", ); $this->info("5. Run: php artisan migrate"); $this->info("6. Run: php artisan ide-helper:models -RW"); } } protected function createModel(string $name): void { $modelTemplate = str_replace( ["{{modelName}}", "{{tableNameSnakeCase}}"], [$name, $this->getTableName($name)], $this->getStub("Model"), ); $this->put("app/Models/{$name}.php", $modelTemplate); $this->info("✓ Created Model: app/Models/{$name}.php"); } protected function createService(string $name): void { $serviceTemplate = str_replace( ["{{modelName}}"], [$name], $this->getStub("Service"), ); $this->put("app/Services/{$name}Service.php", $serviceTemplate); $this->info("✓ Created Service: app/Services/{$name}Service.php"); } protected function createController(string $name): void { $controllerTemplate = str_replace( ["{{modelName}}"], [$name], $this->getStub("Controller"), ); $this->put( "app/Http/Controllers/{$name}Controller.php", $controllerTemplate, ); $this->info( "✓ Created Controller: app/Http/Controllers/{$name}Controller.php", ); } protected function createRequest(string $name): void { $requestTemplate = str_replace( ["{{modelName}}"], [$name], $this->getStub("Request"), ); $this->put("app/Http/Requests/{$name}Request.php", $requestTemplate); $this->info("✓ Created Request: app/Http/Requests/{$name}Request.php"); } protected function createResource(string $name): void { $resourceTemplate = str_replace( ["{{modelName}}"], [$name], $this->getStub("Resource"), ); $this->put("app/Http/Resources/{$name}Resource.php", $resourceTemplate); $this->info( "✓ Created Resource: app/Http/Resources/{$name}Resource.php", ); } protected function createRoute(string $name): void { $routeTemplate = str_replace( ["{{modelName}}", "{{modelNameSnakeCase}}"], [$name, Str::snake($name, "-")], $this->getStub("Route"), ); $routePath = base_path( "routes/authRoutes/" . Str::snake($name) . ".php", ); if (!$this->files->isDirectory(base_path("routes/authRoutes"))) { $this->files->makeDirectory( base_path("routes/authRoutes"), 0755, true, ); } $this->put($routePath, $routeTemplate); $this->info( "✓ Created Route: routes/authRoutes/" . Str::snake($name) . ".php", ); } protected function createMigration(string $name): void { $tableName = $this->getTableName($name); $migrationTemplate = str_replace( ["{{tableNameSnakeCase}}"], [$tableName], $this->getStub("Migration"), ); $timestamp = date("Y_m_d_His"); $filename = $timestamp . "_create_{$tableName}_table.php"; $this->put(database_path("migrations/{$filename}"), $migrationTemplate); $this->info("✓ Created Migration: database/migrations/{$filename}"); } protected function getTableName(string $name): string { return Str::snake(Str::plural($name)); } protected function getStub(string $type): string { return $this->files->get(storage_path("stubs/{$type}.stub")); } protected function put(string $path, string $contents): void { $this->files->put($path, $contents); } }