user(); $since = Carbon::now()->subDays(7); // ID mengajar untuk kelas siswa ini $idMengajars = Mengajar::where('id_kelas', $siswa->id_kelas) ->pluck('id_mengajar'); // Materi baru $materiBaru = Materi::with(['mengajar.mapel', 'mengajar.kelas']) ->whereIn('id_mengajar', $idMengajars) ->where('created_at', '>=', $since) ->orderBy('created_at', 'desc') ->get() ->map(fn($m) => [ 'type' => 'materi', 'title' => 'Materi Baru', 'message' => optional($m->mengajar->mapel)->nama_mapel . ': ' . $m->judul_materi, 'time' => $m->created_at->diffForHumans(), 'time_raw'=> $m->created_at->toIso8601String(), ]); // Tugas baru $tugasBaru = Tugas::with(['mengajar.mapel', 'mengajar.kelas']) ->whereIn('id_mengajar', $idMengajars) ->where('created_at', '>=', $since) ->orderBy('created_at', 'desc') ->get() ->map(fn($t) => [ 'type' => 'tugas', 'title' => 'Tugas Baru', 'message' => optional($t->mengajar->mapel)->nama_mapel . ': ' . $t->judul_tugas, 'time' => $t->created_at->diffForHumans(), 'time_raw'=> $t->created_at->toIso8601String(), ]); // Challenge baru untuk kelas siswa $challengeBaru = Challenge::whereHas('kelas', fn($q) => $q->where('challenge_kelas.id_kelas', $siswa->id_kelas)) ->where('created_at', '>=', $since) ->orderBy('created_at', 'desc') ->get() ->map(fn($c) => [ 'type' => 'challenge', 'title' => 'Challenge Baru!', 'message' => $c->judul_challenge, 'time' => $c->created_at->diffForHumans(), 'time_raw'=> $c->created_at->toIso8601String(), ]); $notifications = $materiBaru ->concat($tugasBaru) ->concat($challengeBaru) ->sortByDesc('time_raw') ->values(); return response()->json([ 'count' => $notifications->count(), 'notifications' => $notifications, ]); } }