info('Memulai Sinkronisasi Master Subject & Bank Soal...'); // --- 1. SINKRONISASI MASTER SUBJECT --- $this->info('Menarik data Subject...'); $oldSubjects = DB::table('lmsv2-old.subjects')->get(); foreach ($oldSubjects as $os) { Subject::updateOrCreate( ['id' => $os->id], ['name' => $os->name ?? $os->title ?? 'Materi ' . $os->id] ); } // --- 2. SINKRONISASI BANK SOAL --- $this->info('Menarik data Bank Soal...'); $oldQuestions = DB::table('lmsv2-old.questions')->get(); if ($oldQuestions->isEmpty()) { $this->warn('Tidak ada data di tabel lmsv2-old.questions!'); return; } $bar = $this->output->createProgressBar(count($oldQuestions)); $bar->start(); $successCount = 0; foreach ($oldQuestions as $old) { // Pemetaan Tipe & Level $type = 'single'; $oldType = strtolower($old->question_type ?? ''); if (str_contains($oldType, 'multiple')) { $type = 'multiple'; } elseif (str_contains($oldType, 'true') || str_contains($oldType, 'boolean')) { $type = 'true_false'; } elseif (str_contains($oldType, 'desc') || str_contains($oldType, 'essay')) { $type = 'descriptive'; } $level = 'sedang'; $oldLevel = strtolower($old->level ?? ''); if (str_contains($oldLevel, 'mudah') || str_contains($oldLevel, 'easy')) { $level = 'mudah'; } elseif (str_contains($oldLevel, 'sulit') || str_contains($oldLevel, 'hard')) { $level = 'sulit'; } // Pemetaan ID (Lama ke Baru) $deptId = (!empty($old->section_id) && $old->section_id != 0) ? $old->section_id : null; $posId = (!empty($old->class_id) && $old->class_id != 0) ? $old->class_id : null; $subjId = (!empty($old->subject_id) && $old->subject_id != 0) ? $old->subject_id : null; $creatorId = (!empty($old->staff_id) && $old->staff_id != 0) ? $old->staff_id : null; $correctAnswer = !empty($old->correct) ? [$old->correct] : null; QuestionBank::updateOrCreate( ['old_id' => $old->id], [ 'department_id' => $deptId, 'position_id' => $posId, 'subject_id' => $subjId, 'question_type' => $type, 'question_level' => $level, 'question_text' => $old->question, 'option_a' => $old->opt_a, 'option_b' => $old->opt_b, 'option_c' => $old->opt_c, 'option_d' => $old->opt_d, 'option_e' => $old->opt_e, 'correct_answer' => $correctAnswer, 'created_by' => $creatorId, 'created_at' => $old->created_at ?? now(), 'updated_at' => $old->updated_at ?? now(), ] ); $successCount++; $bar->advance(); } $bar->finish(); $this->newLine(); $this->info("Sinkronisasi Selesai! Berhasil memperbarui {$successCount} Soal."); } }