*/ private const SKIP_MODULES = [ // 'Platform', // 'Pricing', ]; /** * Seed all enabled Laravel modules that expose a module database seeder. */ public function run(): void { foreach (Module::allEnabled() as $module) { $moduleName = $module->getName(); if (in_array($moduleName, self::SKIP_MODULES, true)) { $this->command?->warn("Skipping module: {$moduleName} - excluded from automatic module seeding"); continue; } $seederClass = $this->resolveSeederClass($moduleName); if ($seederClass === null) { $this->command?->warn("Skipping module: {$moduleName} - no module seeder found"); continue; } $this->command?->info("Seeding module: {$moduleName}"); $this->command?->line("Seeder class: {$seederClass}"); try { $this->call($seederClass); } catch (Throwable $exception) { $this->command?->error("Module seed failed: {$moduleName}"); $this->command?->error($exception->getMessage()); throw $exception; } $this->command?->info("Seeded module: {$moduleName}"); } } /** * Resolve the module database seeder class using supported project patterns. */ private function resolveSeederClass(string $moduleName): ?string { $candidates = [ "Modules\\{$moduleName}\\Database\\Seeders\\{$moduleName}DatabaseSeeder", "Modules\\{$moduleName}\\Database\\Seeders\\{$moduleName}Seeder", "Modules\\{$moduleName}\\Database\\Seeders\\DatabaseSeeder", // Legacy lowercase namespace variants used by some existing modules. "Modules\\{$moduleName}\\database\\seeders\\{$moduleName}DatabaseSeeder", "Modules\\{$moduleName}\\database\\seeders\\{$moduleName}Seeder", "Modules\\{$moduleName}\\database\\seeders\\DatabaseSeeder", ]; foreach ($candidates as $candidate) { if (class_exists($candidate)) { return $candidate; } } return null; } }