From 0bdbd080abb835ed84412b69072d3ad5446b436c Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Fri, 24 Apr 2026 13:07:41 +0700 Subject: [PATCH] feat: Enhance UserSeeder to add roles and create users for leader, admin per outlet, and partner with associated referral codes. --- database/seeders/UserSeeder.php | 84 +++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index 5c85e10..4f9d0ad 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -76,5 +76,89 @@ public function run(): void $owner->assignRole(UserRole::Owner); $owner->outlets()->attach($outlet_ids); + + // leader + $leader = User::create([ + 'email' => 'leader@gmail.com', + 'username' => 'leader', + 'password' => Hash::make(config('myconfig.password_default')), + 'status' => UserStatus::ACTIVE, + 'email_verified_at' => now(), + ]); + + Employee::create([ + 'user_id' => $leader->id, + 'code' => '0003', + 'full_name' => 'Leader User', + 'phone_number' => '082121495801', + 'gender' => Gender::MALE, + 'address' => 'Leader Address', + 'birthdate' => '2000-01-01', + 'hire_date' => now(), + 'status' => EmploymentStatus::PERMANENT, + ]); + + ReferralCode::create([ + 'user_id' => $leader->id, + 'code' => generateReferralCode('leader', 3), + ]); + + $leader->assignRole(UserRole::Leader); + $leader->outlets()->attach($outlet_ids); + + // admin per outlet + $outlets = Outlet::all(); + $userCounter = 4; + foreach ($outlets as $outlet) { + $adminUsername = 'admin_'.preg_replace('/[^a-zA-Z0-9]/', '', strtolower($outlet->name)); + $adminEmail = $adminUsername.'@gmail.com'; + + $admin = User::create([ + 'email' => $adminEmail, + 'username' => $adminUsername, + 'password' => Hash::make(config('myconfig.password_default')), + 'status' => UserStatus::ACTIVE, + 'email_verified_at' => now(), + ]); + + Employee::create([ + 'user_id' => $admin->id, + 'code' => str_pad($userCounter, 4, '0', STR_PAD_LEFT), + 'full_name' => 'Admin '.$outlet->name, + 'phone_number' => '0821214958'.str_pad($userCounter, 2, '0', STR_PAD_LEFT), + 'gender' => Gender::MALE, + 'address' => 'Admin Address', + 'birthdate' => '2000-01-01', + 'hire_date' => now(), + 'status' => EmploymentStatus::PERMANENT, + ]); + + ReferralCode::create([ + 'user_id' => $admin->id, + 'code' => generateReferralCode($adminUsername, $userCounter), + ]); + + $admin->assignRole(UserRole::Admin); + $admin->outlets()->attach($outlet->id); + + $userCounter++; + } + + // partner + $partner = User::create([ + 'email' => 'partner@gmail.com', + 'username' => 'partner', + 'password' => Hash::make(config('myconfig.password_default')), + 'status' => UserStatus::ACTIVE, + 'email_verified_at' => now(), + ]); + + ReferralCode::create([ + 'user_id' => $partner->id, + 'code' => generateReferralCode('partner', $userCounter), + ]); + + $partner->assignRole(UserRole::Partner); + $partner->outlets()->attach($outlet_ids); } }