parfum/database/seeders/UserSeeder.php

165 lines
5.2 KiB
PHP

<?php
namespace Database\Seeders;
use App\Enums\EmploymentStatus;
use App\Enums\Gender;
use App\Enums\UserRole;
use App\Enums\UserStatus;
use App\Models\Employee;
use App\Models\Outlet;
use App\Models\ReferralCode;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class UserSeeder extends Seeder
{
public function run(): void
{
$outlet_ids = Outlet::all()->pluck('id')->toArray();
// developer
$developer = User::create([
'email' => 'project.pangestuyoga@gmail.com',
'username' => 'pangestu',
'password' => Hash::make(config('myconfig.password_default')),
'status' => UserStatus::ACTIVE,
'email_verified_at' => now(),
]);
Employee::create([
'user_id' => $developer->id,
'code' => '0001',
'full_name' => 'Yoga Pangestu',
'phone_number' => '082121495806',
'gender' => Gender::MALE,
'address' => 'Kp. Bakan Sampeu',
'birthdate' => '2005-03-13',
'hire_date' => now(),
'status' => EmploymentStatus::PERMANENT,
]);
ReferralCode::create([
'user_id' => $developer->id,
'code' => generateReferralCode('pangestu', 1),
]);
$developer->assignRole(UserRole::Developer);
$developer->outlets()->attach($outlet_ids);
// owner
$owner = User::create([
'email' => 'mulyadi@gmail.com',
'username' => 'mulyadi',
'password' => Hash::make(config('myconfig.password_default')),
'status' => UserStatus::ACTIVE,
'email_verified_at' => now(),
]);
Employee::create([
'user_id' => $owner->id,
'code' => '0002',
'full_name' => 'Yadi Mulyadi',
'phone_number' => '082121495806',
'gender' => Gender::MALE,
'address' => 'Kp. Bakan Sampeu',
'birthdate' => '2000-01-01',
'hire_date' => now(),
'status' => EmploymentStatus::PERMANENT,
]);
ReferralCode::create([
'user_id' => $owner->id,
'code' => generateReferralCode('mulyadi', 2),
]);
$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);
}
}