2024-05-13 18:55:34 -04:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Database\Seeders;
|
|
|
|
|
2024-05-15 00:31:24 -04:00
|
|
|
use App\Models\License;
|
|
|
|
use App\Models\Mod;
|
2024-08-01 17:15:02 -04:00
|
|
|
use App\Models\ModDependency;
|
2024-05-15 00:31:24 -04:00
|
|
|
use App\Models\ModVersion;
|
|
|
|
use App\Models\SptVersion;
|
2024-05-13 18:55:34 -04:00
|
|
|
use App\Models\User;
|
2024-06-18 00:41:12 -04:00
|
|
|
use App\Models\UserRole;
|
2024-05-13 18:55:34 -04:00
|
|
|
use Illuminate\Database\Seeder;
|
2024-08-28 13:00:23 -04:00
|
|
|
|
|
|
|
use function Laravel\Prompts\progress;
|
2024-05-13 18:55:34 -04:00
|
|
|
|
|
|
|
class DatabaseSeeder extends Seeder
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Seed the application's database.
|
|
|
|
*/
|
|
|
|
public function run(): void
|
|
|
|
{
|
2024-08-28 13:00:23 -04:00
|
|
|
// how many of each "thing" to make during seeding
|
|
|
|
$userCount = 100;
|
|
|
|
$modCount = 300;
|
|
|
|
$modVersionCount = 500;
|
|
|
|
|
2024-05-15 00:31:24 -04:00
|
|
|
// Create a few SPT versions.
|
2024-08-22 17:04:07 -04:00
|
|
|
$spt_versions = SptVersion::factory(30)->create();
|
2024-05-13 18:55:34 -04:00
|
|
|
|
2024-05-15 00:31:24 -04:00
|
|
|
// Create some code licenses.
|
|
|
|
$licenses = License::factory(10)->create();
|
|
|
|
|
2024-06-18 00:41:12 -04:00
|
|
|
// Add 5 administrators.
|
|
|
|
$administrator = UserRole::factory()->administrator()->create();
|
2024-06-23 10:01:51 -04:00
|
|
|
User::factory()->for($administrator, 'role')->create([
|
|
|
|
'email' => 'test@example.com',
|
|
|
|
]);
|
2024-08-26 12:39:19 -04:00
|
|
|
|
|
|
|
$this->command->outputComponents()->info('test account created: test@example.com');
|
|
|
|
|
2024-06-23 10:01:51 -04:00
|
|
|
User::factory(4)->for($administrator, 'role')->create();
|
2024-06-18 00:41:12 -04:00
|
|
|
|
|
|
|
// Add 10 moderators.
|
|
|
|
$moderator = UserRole::factory()->moderator()->create();
|
2024-06-20 12:11:49 -04:00
|
|
|
User::factory(5)->for($moderator, 'role')->create();
|
2024-06-18 00:41:12 -04:00
|
|
|
|
2024-05-15 00:31:24 -04:00
|
|
|
// Add 100 users.
|
2024-08-28 13:00:23 -04:00
|
|
|
$users = progress(
|
|
|
|
label: 'adding users...',
|
|
|
|
steps: $userCount,
|
|
|
|
callback: fn () => User::factory()->create()
|
|
|
|
);
|
2024-08-26 12:39:19 -04:00
|
|
|
|
2024-08-28 13:00:23 -04:00
|
|
|
// dd($users);
|
2024-08-26 12:39:19 -04:00
|
|
|
|
2024-08-28 13:00:23 -04:00
|
|
|
$users = collect($users);
|
2024-05-15 00:31:24 -04:00
|
|
|
|
2024-08-22 17:04:07 -04:00
|
|
|
// Add 300 mods, assigning them to the users we just created.
|
2024-07-04 22:10:48 -04:00
|
|
|
$allUsers = $users->merge([$administrator, $moderator]);
|
2024-08-28 13:00:23 -04:00
|
|
|
|
|
|
|
$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);
|
|
|
|
}
|
|
|
|
);
|
2024-05-15 00:31:24 -04:00
|
|
|
|
2024-08-22 17:04:07 -04:00
|
|
|
// Add 3000 mod versions, assigning them to the mods we just created.
|
2024-08-28 13:00:23 -04:00
|
|
|
$modVersions = progress(
|
|
|
|
label: 'adding mods versions ...',
|
|
|
|
steps: $modVersionCount,
|
|
|
|
callback: fn () => ModVersion::factory()->recycle([$mods, $spt_versions])->create()
|
|
|
|
);
|
|
|
|
|
|
|
|
$modVersions = collect($modVersions);
|
2024-08-01 17:15:02 -04:00
|
|
|
|
|
|
|
// Add ModDependencies to a subset of ModVersions.
|
2024-08-28 13:00:23 -04:00
|
|
|
|
|
|
|
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();
|
|
|
|
}
|
2024-08-01 17:15:02 -04:00
|
|
|
}
|
|
|
|
}
|
2024-08-28 13:00:23 -04:00
|
|
|
);
|
|
|
|
|
2024-08-26 12:39:19 -04:00
|
|
|
$this->command->outputComponents()->success('Database seeded');
|
2024-08-01 17:15:02 -04:00
|
|
|
}
|
2024-05-13 18:55:34 -04:00
|
|
|
}
|