feat: update UserSeeder pakai Factory

This commit is contained in:
2026-04-04 12:56:13 +07:00
parent 258508035d
commit cde63da358
2 changed files with 24 additions and 42 deletions
+8 -5
View File
@@ -25,11 +25,14 @@ class UserFactory extends Factory
public function definition(): array public function definition(): array
{ {
return [ return [
'name' => fake()->name(), 'name' => fake('id_ID')->name(),
'email' => fake()->unique()->safeEmail(), 'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(), 'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'), 'password' => static::$password ??= Hash::make('password'),
'remember_token' => Str::random(10), 'remember_token' => Str::random(10),
'phone' => '08' . fake()->numerify('#########'),
'address' => 'Desa Karangdadap, Kalibagor, Banyumas',
'status' => 'aktif',
]; ];
} }
+16 -37
View File
@@ -5,50 +5,29 @@ namespace Database\Seeders;
use App\Models\Division; use App\Models\Division;
use App\Models\User; use App\Models\User;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
class UserSeeder extends Seeder class UserSeeder extends Seeder
{ {
public function run(): void public function run(): void
{ {
$divisions = Division::pluck('id', 'name'); $divisions = Division::pluck('id')->toArray();
$users = [ // super_admin
['name' => 'Budi Santoso', 'email' => 'ketua@persegi.id', 'role' => 'ketua', 'division' => 'Humas'], User::factory()->createOne([
['name' => 'Siti Rahayu', 'email' => 'bendahara@persegi.id','role' => 'bendahara', 'division' => 'Pendidikan'], 'name' => 'Super Admin',
['name' => 'Ahmad Fauzi', 'email' => 'pengurus@persegi.id', 'role' => 'pengurus', 'division' => 'Olahraga'], 'email' => 'admin@admin.com',
['name' => 'Dewi Lestari', 'email' => 'auditor@persegi.id', 'role' => 'auditor', 'division' => 'Seni & Budaya'], 'password' => bcrypt('admin'),
['name' => 'Rizky Pratama', 'email' => 'anggota1@persegi.id', 'role' => 'anggota', 'division' => 'Lingkungan'], 'phone' => '08123456789',
['name' => 'Nur Hidayah', 'email' => 'anggota2@persegi.id', 'role' => 'anggota', 'division' => 'Humas'], 'status' => 'aktif',
]; ])->assignRole('super_admin');
// super_admin mendapat semua permission via Shield config // 2 user per role
$superAdmin = User::firstOrCreate( foreach (['ketua', 'bendahara', 'pengurus', 'auditor', 'anggota'] as $role) {
['email' => 'admin@admin.com'], User::factory(2)->create(['division_id' => fake()->randomElement($divisions)])
[ ->each(fn ($user) => $user->assignRole($role));
'name' => 'Super Admin',
'password' => bcrypt('admin'),
'phone' => '08123456789',
'status' => 'aktif',
]
);
$superAdmin->assignRole('super_admin');
foreach ($users as $data) {
$user = User::firstOrCreate(
['email' => $data['email']],
[
'name' => $data['name'],
'password' => bcrypt('password'),
'phone' => '08' . rand(100000000, 999999999),
'address' => 'Desa Karangdadap, Kalibagor, Banyumas',
'division_id' => $divisions[$data['division']] ?? null,
'status' => 'aktif',
]
);
$user->syncRoles([$data['role']]);
} }
// 2 user tanpa role
User::factory(2)->create(['division_id' => fake()->randomElement($divisions)]);
} }
} }