From 681ef3ac914256e7619919f21f3322a83751b97e Mon Sep 17 00:00:00 2001 From: "waffle.lord" Date: Wed, 28 Aug 2024 13:00:23 -0400 Subject: [PATCH] add full progress to seeder --- database/seeders/DatabaseSeeder.php | 83 ++++++++++++++++++----------- 1 file changed, 51 insertions(+), 32 deletions(-) diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 28d487b..33d7d28 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -10,8 +10,8 @@ use App\Models\SptVersion; use App\Models\User; use App\Models\UserRole; use Illuminate\Database\Seeder; -use Symfony\Component\Console\Helper\ProgressBar; -use Symfony\Component\Console\Output\ConsoleOutput; + +use function Laravel\Prompts\progress; class DatabaseSeeder extends Seeder { @@ -20,6 +20,11 @@ class DatabaseSeeder extends Seeder */ public function run(): void { + // how many of each "thing" to make during seeding + $userCount = 100; + $modCount = 300; + $modVersionCount = 500; + // Create a few SPT versions. $spt_versions = SptVersion::factory(30)->create(); @@ -34,13 +39,6 @@ class DatabaseSeeder extends Seeder $this->command->outputComponents()->info('test account created: test@example.com'); - $progress = $this->command->getOutput()->createProgressBar(5); - $progress->setFormat("%message%\n %current%/%max% [%bar%] %percent:3s%%"); - $progress->setMessage("starting ..."); - - $progress->start(); - - $progress->setMessage('adding users ...'); User::factory(4)->for($administrator, 'role')->create(); // Add 10 moderators. @@ -48,40 +46,61 @@ class DatabaseSeeder extends Seeder User::factory(5)->for($moderator, 'role')->create(); // Add 100 users. - $users = User::factory(100)->create(); - $progress->advance(); + $users = progress( + label: 'adding users...', + steps: $userCount, + callback: fn () => User::factory()->create() + ); + // dd($users); + $users = collect($users); // Add 300 mods, assigning them to the users we just created. - $progress->setMessage('adding mods ...'); $allUsers = $users->merge([$administrator, $moderator]); - $mods = Mod::factory(300)->recycle([$licenses])->create(); - foreach ($mods as $mod) { - $userIds = $allUsers->random(rand(1, 3))->pluck('id')->toArray(); - $mod->users()->attach($userIds); - } - $progress->advance(); + + $mods = progress( + label: 'adding mods...', + steps: $modCount, + callback: fn () => Mod::factory()->recycle([$licenses])->create() + ); + + $mods = collect($mods); + + progress( + label: 'attaching mod users ...', + steps: $mods, + callback: function ($mod) use ($allUsers) { + $userIds = $allUsers->random(rand(1, 3))->pluck('id')->toArray(); + $mod->users()->attach($userIds); + } + ); // Add 3000 mod versions, assigning them to the mods we just created. - $progress->setMessage('adding mod versions ...'); - $modVersions = ModVersion::factory(3000)->recycle([$mods, $spt_versions])->create(); - $progress->advance(); + $modVersions = progress( + label: 'adding mods versions ...', + steps: $modVersionCount, + callback: fn () => ModVersion::factory()->recycle([$mods, $spt_versions])->create() + ); + + $modVersions = collect($modVersions); // Add ModDependencies to a subset of ModVersions. - $progress->setMessage('adding mod dependencies ...'); - foreach ($modVersions as $modVersion) { - $hasDependencies = rand(0, 100) < 30; // 30% chance to have dependencies - if ($hasDependencies) { - $dependencyMods = $mods->random(rand(1, 3)); // 1 to 3 dependencies - foreach ($dependencyMods as $dependencyMod) { - ModDependency::factory()->recycle([$modVersion, $dependencyMod])->create(); + + progress( + label: 'adding mods dependencies ...', + steps: $modVersions, + callback: function ($modVersion) use ($mods) { + $hasDependencies = rand(0, 100) < 30; // 30% chance to have dependencies + if ($hasDependencies) { + $dependencyMods = $mods->random(rand(1, 3)); // 1 to 3 dependencies + foreach ($dependencyMods as $dependencyMod) { + ModDependency::factory()->recycle([$modVersion, $dependencyMod])->create(); + } } } - } - $progress->advance(); - $progress->finish(); - $this->command->info(''); + ); + $this->command->outputComponents()->success('Database seeded'); } }