middleware('role:user'); } public function index() { $addictions = Addiction::where('status', 'active') ->orderBy('min_percentage', 'desc') ->get(); return view('user.dashboard', compact('addictions')); } public function history() { $histories = History::with('user', 'addiction') ->where('user_id', Auth::id()) ->orderBy('created_at', 'desc') ->get(); return view('user.history', compact('histories')); } public function detailHistory($id) { $history = History::with('user', 'addiction', 'details')->find($id); return view('user.history-detail', compact('history')); } public function addiction() { $items = Item::where('status', 'active')->inRandomOrder()->get(); $likerts = Likert::orderBy('score')->get(); return view('user.addiction', compact('items', 'likerts')); } public function storeAddiction(Request $request) { $items = $request->items; $values = $request->values; $answers = $request->answers; $maxLikert = Likert::orderBy('score', 'desc')->first()->score; $userScores = []; $maxScores = []; foreach ($values as $key => $value) { $score = Likert::find($answers[$key])->score; $userScores[] = $value * $score; $maxScores[] = $value * $maxLikert; } $totalUserScore = array_sum($userScores); $totalMaxScore = array_sum($maxScores); $percentage = round(($totalUserScore / $totalMaxScore) * 100, 2); $addiction = Addiction::where('min_percentage', '<=', $percentage) ->where('max_percentage', '>=', $percentage) ->where('status', 'active') ->first(); if (is_null($addiction)) { return redirect()->back()->with('error', 'Terjadi kesalahan saat mencari jenis kecanduan'); } $history = History::create([ 'user_id' => Auth::id(), 'addiction_id' => $addiction->id, 'result' => $percentage, ]); foreach ($items as $key => $item) { $history->details()->create([ 'item_id' => $item, 'likert_id' => $answers[$key], ]); } return redirect()->route('user.history')->with('success', 'Berhasil menambahkan riwayat'); } }