MIF_E31210592/app/Http/Controllers/api/TugasMobileController.php

131 lines
4.5 KiB
PHP

<?php
namespace App\Http\Controllers\api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
class TugasMobileController extends Controller
{
public function uploadTugas(Request $request)
{
// Validasi input
// $validator = Validator::make($request->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);
}
}
}