get(); // G01-G30 = Hama, G31-G60 = Penyakit $gejalaHama = $semuaGejala->filter(fn($g) => (int) substr($g->kode, 1) <= 30); $gejalaPenyakit = $semuaGejala->filter(fn($g) => (int) substr($g->kode, 1) > 30); return view('user.konsultasi', compact('semuaGejala', 'gejalaHama', 'gejalaPenyakit')); } // ── POST /konsultasi/proses ─────────────────────────────── // Memproses gejala yang dipilih, menjalankan CF, simpan hasil public function proses(Request $request) { $request->validate([ 'gejala' => ['required', 'array', 'min:1'], 'gejala.*' => ['integer', 'exists:tbl_gejala,id'], ], [ 'gejala.required' => 'Pilih minimal 1 gejala terlebih dahulu.', 'gejala.min' => 'Pilih minimal 1 gejala terlebih dahulu.', ]); $gejalaIds = array_map('intval', $request->input('gejala')); $cfUserMap = []; // Jalankan mesin inferensi CF $hasil = $this->cfService->hitung($gejalaIds, $cfUserMap); if (isset($hasil['error'])) { return back()->withErrors(['gejala' => $hasil['error']]); } // Gunakan user_id login, fallback ke 1 jika belum login $userId = auth()->id() ?? 1; $konsultasi = $this->cfService->simpan($userId, $gejalaIds, $cfUserMap, $hasil); return redirect()->route('hasil.show', $konsultasi->id); } // ── GET /hasil/{id} ─────────────────────────────────────── // Menampilkan halaman hasil diagnosa public function hasilShow(int $id) { $konsultasi = Konsultasi::with([ 'hasilDiagnosa.penyakit.solusi', 'gejalaList.gejala', ])->findOrFail($id); // Jika sudah login, pastikan hanya bisa lihat hasil sendiri if (auth()->check() && $konsultasi->user_id !== auth()->id()) { abort(403); } $gejalaIds = $konsultasi->gejalaList->pluck('id_gejala')->toArray(); $hasilInfer = $this->cfService->hitung($gejalaIds); return view('user.hasil', compact('konsultasi', 'hasilInfer')); } // ── GET /riwayat ────────────────────────────────────────── // Menampilkan riwayat konsultasi milik user yang login public function riwayat() { $query = auth()->check() ? Konsultasi::where('user_id', auth()->id()) : Konsultasi::query(); $riwayat = $query ->with('hasilUtama.penyakit') ->latest('tanggal') ->paginate(10); return view('user.riwayat', compact('riwayat')); } }