refactor: update DatabaseSeeder to conditionally load seeders based on environment (local vs production)

This commit is contained in:
Yoga Pangestu 2026-06-25 23:16:38 +07:00
parent 4afba34a57
commit ad9ee3a99b
2 changed files with 104 additions and 29 deletions

View File

@ -11,34 +11,22 @@ class DatabaseSeeder extends Seeder
public function run(): void
{
$this->call([
RolePermissionSeeder::class,
UserSeeder::class,
SystemConfigurationSeeder::class,
// CategorySeeder::class,
// ProductSeeder::class,
// ProductVariantSeeder::class,
// RawMaterialSeeder::class,
// RawMaterialPriceSeeder::class,
// SupplierSeeder::class,
// CustomerSeeder::class,
CashAccountSeeder::class,
// CashTransactionSeeder::class,
// ExpenseSeeder::class,
// PayrollPeriodSeeder::class,
// PayrollSeeder::class,
// PayrollAdjustmentSeeder::class,
// AttendanceSeeder::class,
// LeaveRequestSeeder::class,
// EmployeeAdvanceSeeder::class,
// RejectionSeeder::class,
// PurchaseSeeder::class,
// PurchaseItemSeeder::class,
// OrderSeeder::class,
// OrderItemSeeder::class,
// CuttingSeeder::class,
// CuttingMaterialSeeder::class,
// CuttingResultSeeder::class,
]);
if (app()->isLocal()) {
$this->call([
RolePermissionSeeder::class,
UserSeeder::class,
EmployeeSeeder::class,
SystemConfigurationSeeder::class,
CategorySeeder::class,
]);
}
if (app()->isProduction()) {
$this->call([
RolePermissionSeeder::class,
UserSeeder::class,
SystemConfigurationSeeder::class,
]);
}
}
}

View File

@ -0,0 +1,87 @@
<?php
namespace Database\Seeders;
use App\Enums\EmploymentStatus;
use App\Enums\Gender;
use App\Enums\Role;
use App\Models\Employee;
use App\Models\User;
use App\Models\UserProfile;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class EmployeeSeeder extends Seeder
{
public function run(): void
{
DB::transaction(function () {
$employees = [
Role::ADMIN_TOKO->value => [
'username' => 'admintoko',
'email' => 'admintoko@gmail.com',
'full_name' => 'Admin Toko',
],
Role::ADMIN_BAHAN_BAKU->value => [
'username' => 'adminbahanbaku',
'email' => 'adminbahanbaku@gmail.com',
'full_name' => 'Admin Bahan Baku',
],
Role::DIREKTUR->value => [
'username' => 'direktur',
'email' => 'direktur@gmail.com',
'full_name' => 'Direktur',
],
Role::MARKETING->value => [
'username' => 'marketing',
'email' => 'marketing@gmail.com',
'full_name' => 'Marketing',
],
Role::CASHIER->value => [
'username' => 'cashier',
'email' => 'cashier@gmail.com',
'full_name' => 'Cashier',
],
Role::NON_OPERATOR->value => [
'username' => 'nonoperator',
'email' => 'nonoperator@gmail.com',
'full_name' => 'Non Operator',
],
];
foreach ($employees as $roleName => $data) {
$user = User::firstOrCreate(
['email' => $data['email']],
[
'username' => $data['username'],
'password' => Hash::make(config('auth.password_default')),
'is_active' => true,
]
);
UserProfile::firstOrCreate(
['user_id' => $user->id],
[
'full_name' => $data['full_name'],
'phone_number' => '08'.fake()->numerify('##########'),
'gender' => fake()->randomElement(array_column(Gender::cases(), 'value')),
'birth_date' => '1995-01-01',
'address' => 'Jl. Jenderal Sudirman No. 123',
]
);
Employee::firstOrCreate(
['user_id' => $user->id],
[
'join_date' => now()->format('Y-m-d'),
'employment_status' => EmploymentStatus::FULL_TIME->value,
'base_salary' => 3000000,
]
);
$user->syncRoles([$roleName]);
}
});
}
}