middleware('auth:siswa'); } public function index() { /** @var \App\Models\Siswa $siswa */ $siswa = Auth::guard('siswa')->user(); // tugas $sudahDikumpulkan = PengumpulanTugas::where('id_siswa', $siswa->id_siswa) ->pluck('id_tugas'); $tugasRaw = Tugas::with(['mengajar.mapel']) ->whereNotIn('id_tugas', $sudahDikumpulkan) ->where('deadline', '>=', Carbon::now()) ->whereHas('mengajar', function ($q) use ($siswa) { $q->where('id_kelas', $siswa->id_kelas); }) ->orderBy('deadline', 'asc') ->take(5) ->get(); $tugasList = []; foreach ($tugasRaw as $tugas) { $tgl = Carbon::parse($tugas->deadline) ->locale('id') ->isoFormat('dddd, D MMMM YYYY'); $namaMapel = optional(optional($tugas->mengajar)->mapel)->nama_mapel ?? '-'; $tugasList[$tgl][] = [ 'id_tugas' => $tugas->id_tugas, // tambah ini 'jam' => Carbon::parse($tugas->deadline)->format('H.i'), 'nama' => $tugas->judul_tugas, 'mapel' => 'Belum ยท ' . $namaMapel, ]; } // challenge mingguan $startMinggu = Carbon::now()->startOfWeek(); $endMinggu = Carbon::now()->endOfWeek(); // Challenge untuk kelas siswa yang masih aktif minggu ini $challengeTotal = Challenge::whereHas('kelas', function ($q) use ($siswa) { $q->where('challenge_kelas.id_kelas', $siswa->id_kelas); }) ->where('tenggat_waktu', '>=', Carbon::now()) ->whereBetween('created_at', [$startMinggu, $endMinggu]) ->count(); // Challenge yang sudah selesai dikerjakan siswa minggu ini $challengeDone = PesertaChallenge::where('id_siswa', $siswa->id_siswa) ->where('status', 'selesai') ->whereBetween('waktu_submit', [$startMinggu, $endMinggu]) ->count(); // mascot $tugasSelesai = PengumpulanTugas::where('id_siswa', $siswa->id_siswa) ->whereIn('status', ['dikumpulkan', 'terlambat']) ->whereBetween('tanggal_submit', [$startMinggu, $endMinggu]) ->count(); // leaderboard $leaderboardRaw = Leaderboard::with('siswa') ->where('id_kelas', $siswa->id_kelas) ->orderBy('total_exp', 'desc') ->take(3) ->get(); $leaderboard = $leaderboardRaw->map(function ($item, $index) { return [ 'rank' => $index + 1, 'nama' => optional($item->siswa)->nama ?? '-', 'exp' => $item->total_exp, ]; })->toArray(); return view('siswa.dashboard', compact( 'tugasList', 'challengeDone', 'challengeTotal', 'tugasSelesai', 'leaderboard', )); } }