TIF_E41201544/app/Http/Controllers/User/DashboardController.php

99 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\Addiction;
use App\Models\History;
use App\Models\Item;
use App\Models\Likert;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class DashboardController extends Controller
{
public function __construct()
{
$this->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');
}
}