input('per_page', 7); $perPage = in_array($perPage, [5, 7]) ? $perPage : 7; $search = trim((string) $request->input('search', '')); $query = Siswa::with(['user', 'jurusan'])->orderBy('id', 'desc'); if ($search !== '') { $query->where(function ($q) use ($search) { $q->where('id_siswa', 'like', "%{$search}%") ->orWhere('nama_lengkap', 'like', "%{$search}%") ->orWhere('nisn', 'like', "%{$search}%") ->orWhere('kelas', 'like', "%{$search}%") ->orWhere('peminatan', 'like', "%{$search}%") ->orWhereHas('user', function ($user) use ($search) { $user->where('name', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%"); }) ->orWhereHas('jurusan', function ($jurusan) use ($search) { $jurusan->where('nama_jurusan', 'like', "%{$search}%"); }); }); } $siswa = $query->paginate($perPage); return response()->json([ 'success' => true, 'data' => $siswa->items(), 'current_page' => $siswa->currentPage(), 'last_page' => $siswa->lastPage(), 'per_page' => $siswa->perPage(), 'total' => $siswa->total(), 'from' => $siswa->firstItem(), 'to' => $siswa->lastItem(), ], 200); } public function store(Request $request) { $validator = Validator::make($request->all(), [ 'user_id' => 'required|exists:users,id|unique:siswas,user_id', 'jurusan_id' => 'required|exists:jurusans,id', 'nama_lengkap' => 'required|string|max:255', 'nisn' => 'required|string|unique:siswas,nisn', 'kelas' => 'required|string', 'peminatan' => 'required|string', ], [ 'user_id.unique' => 'Gagal! Akun User ID ini sudah terikat dengan data siswa lain.', 'nisn.unique' => 'Gagal! NISN ' . $request->nisn . ' sudah terdaftar di sistem.', 'nama_lengkap.required' => 'Kolom nama lengkap tidak boleh dikosongkan.', 'nisn.required' => 'Kolom NISN wajib diisi.', 'user_id.exists' => 'User ID yang Anda masukkan tidak terdaftar di database.', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'message' => 'Validasi gagal', 'errors' => $validator->errors() ], 422); } $siswa = Siswa::create($request->all()); return response()->json([ 'success' => true, 'message' => 'Siswa ' . $siswa->id_siswa . ' (' . $siswa->nama_lengkap . ') berhasil ditambahkan.', 'data' => $siswa ], 201); } public function show($id) { $siswa = Siswa::find($id); if (!$siswa) { return response()->json(['success' => false, 'message' => 'Data tidak ditemukan'], 404); } return response()->json(['success' => true, 'data' => $siswa], 200); } public function update(Request $request, $id) { $siswa = Siswa::find($id); if (!$siswa) { return response()->json(['success' => false, 'message' => 'Data tidak ditemukan'], 404); } $validator = Validator::make($request->all(), [ 'nama_lengkap' => 'required|string|max:255', 'nisn' => 'required|string|unique:siswas,nisn,' . $id, 'kelas' => 'required|string', ], [ 'nisn.unique' => 'Gagal Update! NISN ' . $request->nisn . ' sudah digunakan siswa lain.' ]); if ($validator->fails()) { return response()->json(['success' => false, 'errors' => $validator->errors()], 422); } $siswa->update($request->all()); return response()->json([ 'success' => true, 'message' => 'Data ' . $siswa->id_siswa . ' berhasil diperbarui' ], 200); } public function destroy($id) { $siswa = Siswa::find($id); if (!$siswa) { return response()->json(['success' => false, 'message' => 'Data tidak ditemukan'], 404); } $siswa->delete(); return response()->json(['success' => true, 'message' => 'Data berhasil dihapus'], 200); } }