add full progress to seeder

This commit is contained in:
IsWaffle 2024-08-28 13:00:23 -04:00
parent 5d5d94eaee
commit 681ef3ac91

View File

@ -10,8 +10,8 @@ use App\Models\SptVersion;
use App\Models\User; use App\Models\User;
use App\Models\UserRole; use App\Models\UserRole;
use Illuminate\Database\Seeder; 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 class DatabaseSeeder extends Seeder
{ {
@ -20,6 +20,11 @@ class DatabaseSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
// how many of each "thing" to make during seeding
$userCount = 100;
$modCount = 300;
$modVersionCount = 500;
// Create a few SPT versions. // Create a few SPT versions.
$spt_versions = SptVersion::factory(30)->create(); $spt_versions = SptVersion::factory(30)->create();
@ -34,13 +39,6 @@ class DatabaseSeeder extends Seeder
$this->command->outputComponents()->info('test account created: test@example.com'); $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(); User::factory(4)->for($administrator, 'role')->create();
// Add 10 moderators. // Add 10 moderators.
@ -48,29 +46,51 @@ class DatabaseSeeder extends Seeder
User::factory(5)->for($moderator, 'role')->create(); User::factory(5)->for($moderator, 'role')->create();
// Add 100 users. // Add 100 users.
$users = User::factory(100)->create(); $users = progress(
$progress->advance(); 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. // Add 300 mods, assigning them to the users we just created.
$progress->setMessage('adding mods ...');
$allUsers = $users->merge([$administrator, $moderator]); $allUsers = $users->merge([$administrator, $moderator]);
$mods = Mod::factory(300)->recycle([$licenses])->create();
foreach ($mods as $mod) { $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(); $userIds = $allUsers->random(rand(1, 3))->pluck('id')->toArray();
$mod->users()->attach($userIds); $mod->users()->attach($userIds);
} }
$progress->advance(); );
// Add 3000 mod versions, assigning them to the mods we just created. // Add 3000 mod versions, assigning them to the mods we just created.
$progress->setMessage('adding mod versions ...'); $modVersions = progress(
$modVersions = ModVersion::factory(3000)->recycle([$mods, $spt_versions])->create(); label: 'adding mods versions ...',
$progress->advance(); steps: $modVersionCount,
callback: fn () => ModVersion::factory()->recycle([$mods, $spt_versions])->create()
);
$modVersions = collect($modVersions);
// Add ModDependencies to a subset of ModVersions. // Add ModDependencies to a subset of ModVersions.
$progress->setMessage('adding mod dependencies ...');
foreach ($modVersions as $modVersion) { progress(
label: 'adding mods dependencies ...',
steps: $modVersions,
callback: function ($modVersion) use ($mods) {
$hasDependencies = rand(0, 100) < 30; // 30% chance to have dependencies $hasDependencies = rand(0, 100) < 30; // 30% chance to have dependencies
if ($hasDependencies) { if ($hasDependencies) {
$dependencyMods = $mods->random(rand(1, 3)); // 1 to 3 dependencies $dependencyMods = $mods->random(rand(1, 3)); // 1 to 3 dependencies
@ -79,9 +99,8 @@ class DatabaseSeeder extends Seeder
} }
} }
} }
$progress->advance(); );
$progress->finish();
$this->command->info('');
$this->command->outputComponents()->success('Database seeded'); $this->command->outputComponents()->success('Database seeded');
} }
} }