core updates for seeding and testing
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use mpba\Modules\Facades\Module;
|
||||
use Throwable;
|
||||
|
||||
final class ModuleDatabaseSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Modules intentionally seeded elsewhere or excluded from module auto-seeding.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user