all(), [ // 'id_tugas' => 'required|integer', // 'id_siswa' => 'required|integer', // 'essay_answer' => 'required|string', // 'file_tugas' => 'nullable|string', // Validasi untuk file tugas base64 string, bisa nullable // ]); // if ($validator->fails()) { // return response()->json(['message' => 'Validation error', 'errors' => $validator->errors()], 400); // } $idTugas = $request->input('id_tugas'); $idSiswa = $request->input('id_siswa'); $essayAnswer = $request->input('essay_answer'); $fileTugas = $request->input('file_tugas'); // Base64 encoded string try { // Cek apakah siswa sudah pernah meng-upload tugas dengan idTugas dan idSiswa yang sama sebelumnya $existingSubmission = DB::table('pengumpulan_tugas') ->where('id_tugas', $idTugas) ->where('id_siswa', $idSiswa) ->exists(); if ($existingSubmission) { return response()->json(['message' => 'Siswa sudah meng-upload tugas ini sebelumnya'], 400); } $filename = null; // Proses file jika ada if (!empty($fileTugas)) { // Decode file dari Base64 ke binary $binaryFile = base64_decode($fileTugas); // Generate nama file dengan format idSiswa_idTugas_tanggalWaktu.pdf $filename = $idSiswa . '_' . $idTugas . '_' . now()->format('YmdHis') . '.pdf'; $filePath = 'documents/' . $filename; // Simpan file ke storage/app/public/documents Storage::put('public/' . $filePath, $binaryFile); } // Tambahkan data ke database DB::table('pengumpulan_tugas')->insert([ 'lampiran_tugas' => $filePath, 'essay_answer' => $essayAnswer, 'id_tugas' => $idTugas, 'id_siswa' => $idSiswa, 'nilai' => 0, 'created_at' => now(), 'updated_at' => now(), ]); return response()->json(['message' => 'Data tugas berhasil ditambahkan'], 200); } catch (\Exception $e) { // Tangani jika terjadi kesalahan return response()->json(['message' => 'Terjadi kesalahan saat mengupload file atau menambahkan data tugas', 'error' => $e->getMessage()], 500); } } public function lihatTugas(Request $request) { // Validasi request $request->validate([ 'id_tugas' => 'required|integer', ]); $id_tugas = $request->input('id_tugas'); // Dapatkan nama file dari database $fileName = DB::table('tugas') ->where('id_tugas', $id_tugas) ->value('file_path'); if ($fileName) { // Dapatkan URL lengkap ke file $fileUrl = Storage::url($fileName); // Tambahkan header "ngrok-skip-browser-warning" return response()->json([ 'fileUrl' => asset($fileUrl), ]); } else { // Jika tidak ada data tugas yang ditemukan return response()->json(['message' => 'Tugas tidak ditemukan'], 404); } } public function tampilRiwayatPengumpulanTugas(Request $request) { // Validasi input $validated = $request->validate([ 'id_tugas' => 'required|integer', 'id_siswa' => 'required|integer', ]); $id_tugas = $validated['id_tugas']; $id_siswa = $validated['id_siswa']; try { // Cari data pengumpulan tugas berdasarkan id_tugas dan id_siswa $pengumpulanTugas = DB::table('pengumpulan_tugas') ->where('id_tugas', $id_tugas) ->where('id_siswa', $id_siswa) ->get(); if ($pengumpulanTugas->isEmpty()) { return response()->json(['message' => 'Data tidak ditemukan'], 404); } return response()->json($pengumpulanTugas); } catch (\Exception $e) { return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500); } } }