Initial commit - lms-v2 + CLAUDE.md
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class MigrateUserInitials extends Command
|
||||
{
|
||||
protected $signature = 'lms:migrate-initials';
|
||||
protected $description = 'Migrasi kolom roll_no dari tabel student lama dengan pencocokan Email / Nama karyawan';
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$this->info('Memulai tarik data inisial (roll_no) dengan pencocokan pintar...');
|
||||
|
||||
// Ambil data student dari database lama yang memiliki roll_no
|
||||
$oldStudents = DB::table('lmsv2-old.students')->whereNotNull('roll_no')->get();
|
||||
|
||||
$bar = $this->output->createProgressBar(count($oldStudents));
|
||||
$bar->start();
|
||||
|
||||
$successCount = 0;
|
||||
$failCount = 0;
|
||||
|
||||
foreach ($oldStudents as $oldStudent) {
|
||||
// Ubah object ke array agar lebih aman saat mengecek keberadaan kolom (mencegah error jika kolom tidak ada)
|
||||
$old = (array) $oldStudent;
|
||||
|
||||
$matchedUser = null;
|
||||
|
||||
// PRIORITAS 1: Cocokkan berdasarkan Email (Paling Akurat)
|
||||
if (!empty($old['email'])) {
|
||||
$matchedUser = DB::table('lmsv2.users')->where('email', $old['email'])->first();
|
||||
}
|
||||
|
||||
// PRIORITAS 2: Jika email tidak cocok/kosong, cocokkan berdasarkan Nama
|
||||
if (!$matchedUser) {
|
||||
$query = DB::table('lmsv2.users');
|
||||
|
||||
// Cek apakah database lama menggunakan 'first_name' atau 'name' tunggal
|
||||
if (!empty($old['first_name'])) {
|
||||
$query->where('first_name', $old['first_name']);
|
||||
if (!empty($old['last_name'])) {
|
||||
$query->where('last_name', $old['last_name']);
|
||||
}
|
||||
} elseif (!empty($old['name'])) {
|
||||
// Jika DB lama hanya punya 1 kolom 'name'
|
||||
$query->where(DB::raw("CONCAT(first_name, ' ', COALESCE(last_name, ''))"), 'LIKE', "%{$old['name']}%");
|
||||
} else {
|
||||
// Tidak ada indikator nama yang bisa dicari
|
||||
$query->where('id', '<', 0); // Force empty result
|
||||
}
|
||||
|
||||
$matchedUser = $query->first();
|
||||
}
|
||||
|
||||
// JIKA KETEMU: Update tabel users yang baru
|
||||
if ($matchedUser) {
|
||||
DB::table('lmsv2.users')
|
||||
->where('id', $matchedUser->id) // Update berdasarkan ID baru yang ditemukan
|
||||
->update(['initial' => $old['roll_no']]);
|
||||
|
||||
$successCount++;
|
||||
} else {
|
||||
$failCount++;
|
||||
}
|
||||
|
||||
$bar->advance();
|
||||
}
|
||||
|
||||
$bar->finish();
|
||||
$this->newLine();
|
||||
$this->info("Selesai! Berhasil memetakan: {$successCount} data. Tidak ditemukan: {$failCount} data.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user