mirror of
https://github.com/sp-tarkov/forge.git
synced 2025-02-13 04:30:41 -05:00
Merge pull request 'display seeder progress' (#51) from waffle.lord/forge:impl/seeder-progress into develop
Reviewed-on: SPT/forge#51
This commit is contained in:
commit
bf5593ae72
@ -11,6 +11,8 @@ use App\Models\User;
|
|||||||
use App\Models\UserRole;
|
use App\Models\UserRole;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
use function Laravel\Prompts\progress;
|
||||||
|
|
||||||
class DatabaseSeeder extends Seeder
|
class DatabaseSeeder extends Seeder
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -18,39 +20,88 @@ 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 = 3000;
|
||||||
|
|
||||||
// Create a few SPT versions.
|
// Create a few SPT versions.
|
||||||
$spt_versions = SptVersion::factory(30)->create();
|
$spt_versions = SptVersion::factory(30)->create();
|
||||||
|
|
||||||
// Create some code licenses.
|
// Create some code licenses.
|
||||||
$licenses = License::factory(10)->create();
|
$licenses = License::factory(10)->create();
|
||||||
|
|
||||||
// Add 5 administrators.
|
// Add administrators.
|
||||||
$administrator = UserRole::factory()->administrator()->create();
|
$administratorRole = UserRole::factory()->administrator()->create();
|
||||||
User::factory()->for($administrator, 'role')->create([
|
$testAccount = User::factory()->for($administratorRole, 'role')->create([
|
||||||
'email' => 'test@example.com',
|
'email' => 'test@example.com',
|
||||||
]);
|
]);
|
||||||
User::factory(4)->for($administrator, 'role')->create();
|
|
||||||
|
|
||||||
// Add 10 moderators.
|
$this->command->outputComponents()->info("test account created: $testAccount->email");
|
||||||
$moderator = UserRole::factory()->moderator()->create();
|
|
||||||
User::factory(5)->for($moderator, 'role')->create();
|
|
||||||
|
|
||||||
// Add 100 users.
|
User::factory(4)->for($administratorRole, 'role')->create();
|
||||||
$users = User::factory(100)->create();
|
|
||||||
|
|
||||||
// Add 300 mods, assigning them to the users we just created.
|
// Add moderators.
|
||||||
$allUsers = $users->merge([$administrator, $moderator]);
|
$moderatorRole = UserRole::factory()->moderator()->create();
|
||||||
$mods = Mod::factory(300)->recycle([$licenses])->create();
|
User::factory(5)->for($moderatorRole, 'role')->create();
|
||||||
foreach ($mods as $mod) {
|
|
||||||
|
// Add users
|
||||||
|
progress(
|
||||||
|
label: 'adding users...',
|
||||||
|
steps: $userCount,
|
||||||
|
callback: fn () => User::factory()->create()
|
||||||
|
);
|
||||||
|
|
||||||
|
// get all users
|
||||||
|
$allUsers = User::all();
|
||||||
|
|
||||||
|
// Add user follows
|
||||||
|
progress(
|
||||||
|
label: 'adding user follows ...',
|
||||||
|
steps: $allUsers,
|
||||||
|
callback: function ($user) use ($allUsers) {
|
||||||
|
$hasFollowers = rand(0, 100) < 70; // 70% chance to have followers
|
||||||
|
$isFollowing = rand(0, 100) < 70; // 70% chance to be following other users
|
||||||
|
|
||||||
|
if ($hasFollowers) {
|
||||||
|
$followers = $allUsers->random(rand(1, 10))->pluck('id')->toArray();
|
||||||
|
$user->followers()->attach($followers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($isFollowing) {
|
||||||
|
$following = $allUsers->random(rand(1, 10))->pluck('id')->toArray();
|
||||||
|
$user->following()->attach($following);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$mods = collect(progress(
|
||||||
|
label: 'adding mods...',
|
||||||
|
steps: $modCount,
|
||||||
|
callback: fn () => Mod::factory()->recycle([$licenses])->create()
|
||||||
|
));
|
||||||
|
|
||||||
|
// attach users to 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);
|
||||||
}
|
}
|
||||||
|
);
|
||||||
|
|
||||||
// Add 3000 mod versions, assigning them to the mods we just created.
|
// Add mod versions, assigning them to the mods we just created.
|
||||||
$modVersions = ModVersion::factory(3000)->recycle([$mods, $spt_versions])->create();
|
$modVersions = collect(progress(
|
||||||
|
label: 'adding mods versions ...',
|
||||||
|
steps: $modVersionCount,
|
||||||
|
callback: fn () => ModVersion::factory()->recycle([$mods, $spt_versions])->create()
|
||||||
|
));
|
||||||
|
|
||||||
// Add ModDependencies to a subset of ModVersions.
|
// Add ModDependencies to a subset of ModVersions.
|
||||||
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
|
||||||
@ -59,5 +110,8 @@ class DatabaseSeeder extends Seeder
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->command->outputComponents()->success('Database seeded');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user