MIF_E31222307/app/Http/Controllers/UserController.php

134 lines
3.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Rekomendasi;
use App\Models\Makanan; // pastikan model di-import
use App\Models\JenisMakanan;
use App\Models\Kategori;
use App\Models\RekomendasiAhli;
use App\Models\WaktuMakan;
use Illuminate\Support\Facades\Auth; // pastikan ini ada di atas
class UserController extends Controller
{
//
public function userdash(){
$totalData = DB::table('makanans')->count(); // atau model: DataMakanan::count()
$totalKriteria = DB::table('kriterias')->count();
$totalUser = DB::table('users')->count();
return view('user.userdash', compact('totalData', 'totalKriteria', 'totalUser'));
}
public function userabout(){
return view('user.userabout');
}
public function userfeature(){
return view('user.userfeature');
}
public function userdata(Request $request)
{
// Ambil data dropdown
$jenisMakananList = JenisMakanan::all();
$kategoriList = Kategori::all();
// Query awal
$makananQuery = Makanan::query();
// Filter berdasarkan jenis makanan
if ($request->has('jenis_id') && $request->jenis_id != '') {
$makananQuery->where('jenis_id', $request->jenis_id);
}
// Filter berdasarkan kategori
if ($request->has('kategori_id') && $request->kategori_id != '') {
$makananQuery->where('kategori_id', $request->kategori_id);
}
// Filter berdasarkan pencarian nama makanan
if ($request->has('search') && $request->search != '') {
$makananQuery->where('nama', 'like', '%' . $request->search . '%');
}
// Filter berdasarkan nilai tertinggi / terendah pada kolom yang dipilih
if ($request->has('filter_nilai') && $request->filter_nilai != '' && $request->has('filter_kriteria') && $request->filter_kriteria != '') {
$kolom = $request->filter_kriteria;
// Validasi kolom yang diperbolehkan supaya aman
$allowedColumns = ['lemak', 'natrium', 'energi', 'karbohidrat'];
if (in_array($kolom, $allowedColumns)) {
if ($request->filter_nilai == 'tertinggi') {
$makananQuery->orderBy($kolom, 'desc');
} elseif ($request->filter_nilai == 'terendah') {
$makananQuery->orderBy($kolom, 'asc');
}
}
}
// Menentukan jumlah data per halaman
$perPage = $request->per_page === 'all'
? $makananQuery->count() // tampilkan semua jika 'all'
: ($request->per_page ?? 10); // default 10
// Ambil data dengan paginasi dan simpan parameter pencarian/filter
$makanans = $makananQuery->paginate($perPage)->appends($request->except('page'));
// Kirim ke view
return view('user.userdata', compact('makanans', 'jenisMakananList', 'kategoriList'));
}
public function userresult()
{
$rekomendasi = \App\Models\RekomendasiAhli::with('komponen', 'waktuMakan')
->get()
->groupBy([
fn($item) => $item->waktu_makan_id,
fn($item) => strtolower($item->komponen->nama),
]);
$waktuMakans = \App\Models\WaktuMakan::all()->keyBy('id');
// Ambil alternatif dari tabel rekomendasis
$alternatifGrouped = \App\Models\Rekomendasi::with('makanan')
->where('nilai_akhir', '>', 0)
->get()
->groupBy(fn($item) => $item->waktu_makan_id . '-' . $item->komponen_id);
return view('user.userresult', compact('rekomendasi', 'waktuMakans', 'alternatifGrouped'));
}
public function show($id)
{
// ambil data berdasarkan $id atau bisa juga switch/case
return view('user.userfeature', compact('id'));
}
public function register()
{
// ambil data berdasarkan $id atau bisa juga switch/case
return view('user.userregister', compact('id'));
}
}