refactor: update user migration logic to filter deleted records and adjust role filtering in user table

This commit is contained in:
Yoga Pangestu 2026-04-13 09:28:34 +07:00
parent 3908e027ef
commit 15c76645e4
2 changed files with 22 additions and 18 deletions

View File

@ -33,7 +33,7 @@ public function handle()
{ {
$this->info('Starting user migration...'); $this->info('Starting user migration...');
$legacyUsers = DB::connection('mysql_second')->table('users')->get(); $legacyUsers = DB::connection('mysql_second')->table('users')->where('deleted_at', null)->get();
if ($legacyUsers->isEmpty()) { if ($legacyUsers->isEmpty()) {
$this->warn('No users found in legacy database.'); $this->warn('No users found in legacy database.');
@ -42,10 +42,12 @@ public function handle()
} }
foreach ($legacyUsers as $legacy) { foreach ($legacyUsers as $legacy) {
$user = User::where('email', $legacy->email)->first(); $existingById = User::where('id', $legacy->id)->first();
$existingByEmail = User::where('email', $legacy->email)->first();
$roleName = $this->mapRole($legacy->role); $roleName = $this->mapRole($legacy->role);
if (! $user) { if (! $existingById && ! $existingByEmail) {
$username = $this->generateUniqueUsername($legacy->name, $legacy->email); $username = $this->generateUniqueUsername($legacy->name, $legacy->email);
@ -55,9 +57,9 @@ public function handle()
'email' => $legacy->email, 'email' => $legacy->email,
'username' => $username, 'username' => $username,
'password' => $legacy->password, 'password' => $legacy->password,
'is_active' => $legacy->status == '1' 'is_active' => $legacy->status == '2'
? IsActive::ACTIVE->value ? IsActive::INACTIVE->value
: IsActive::INACTIVE->value, : IsActive::ACTIVE->value,
'email_verified_at' => now(), 'email_verified_at' => now(),
'created_at' => $legacy->created_at ?? now(), 'created_at' => $legacy->created_at ?? now(),
'updated_at' => $legacy->updated_at ?? now(), 'updated_at' => $legacy->updated_at ?? now(),
@ -65,20 +67,22 @@ public function handle()
$user = User::find($userId); $user = User::find($userId);
if ($roleName) { if ($user && $roleName) {
$user->syncRoles([$roleName]); $user->syncRoles([$roleName]);
} }
}
if ($user && ! $user->settings()->exists()) { if (! $user->settings()->exists()) {
$user->settings()->create([ $user->settings()->create([
'notif_style' => NotifStyle::CHEERFUL, 'notif_style' => NotifStyle::FORMAL,
'primary_color' => 'blue', 'primary_color' => 'blue',
'font' => 'Inter', 'font' => 'Inter',
'content_width' => 'full', 'content_width' => 'full',
'border_radius' => 'lg', 'border_radius' => 'lg',
'top_navigation' => false, 'top_navigation' => false,
]); ]);
}
} else {
$this->info('User already exists: '.$legacy->email);
} }
} }

View File

@ -85,7 +85,7 @@ public static function configure(Table $table): Table
SelectFilter::make('roles') SelectFilter::make('roles')
->label('Peran') ->label('Peran')
->relationship('roles', 'name', function (Builder $query): Builder { ->relationship('roles', 'name', function (Builder $query): Builder {
return $query->whereNotIn('name', [RoleEnum::DEVELOPER, RoleEnum::PERUSAHAAN]); return $query->where('name', '!=', RoleEnum::DEVELOPER->value);
}) })
->multiple() ->multiple()
->preload() ->preload()