From eb37501373a57e8638e4adea372af7e4f4419b8f Mon Sep 17 00:00:00 2001 From: ghozahimma65 Date: Sat, 14 Feb 2026 05:47:34 +0700 Subject: [PATCH] fix error --- app/Http/Controllers/Api/AuthController.php | 12 ++++++- app/Http/Controllers/Api/GuruController.php | 29 ++++++++++++++++ app/Http/Controllers/Api/SiswaController.php | 31 +++++++++++++++-- app/Models/Siswa.php | 6 ++-- app/Models/User.php | 32 +++++------------- ...27_create_personal_access_tokens_table.php | 33 +++++++++++++++++++ routes/api.php | 6 ++-- 7 files changed, 119 insertions(+), 30 deletions(-) create mode 100644 database/migrations/2026_02_13_185527_create_personal_access_tokens_table.php diff --git a/app/Http/Controllers/Api/AuthController.php b/app/Http/Controllers/Api/AuthController.php index 4ce26d5..18439b9 100644 --- a/app/Http/Controllers/Api/AuthController.php +++ b/app/Http/Controllers/Api/AuthController.php @@ -10,17 +10,27 @@ class AuthController extends Controller { public function login(Request $request) { + \Log::info('Login Request Recieved', $request->all()); $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { + \Log::info('Auth::attempt success'); $user = Auth::user(); + \Log::info('User retrieved', ['id' => $user->id]); + + $token = $user->createToken('auth_token')->plainTextToken; + \Log::info('Token created'); + return response()->json([ 'success' => true, 'message' => 'Login Berhasil', - 'user' => $user + 'user' => $user, + 'token' => $token ], 200); } + \Log::info('Auth::attempt failed'); + return response()->json([ 'success' => false, 'message' => 'Email atau Password salah' diff --git a/app/Http/Controllers/Api/GuruController.php b/app/Http/Controllers/Api/GuruController.php index 91be65d..e4d0616 100644 --- a/app/Http/Controllers/Api/GuruController.php +++ b/app/Http/Controllers/Api/GuruController.php @@ -7,6 +7,7 @@ use App\Models\Anekdot; use App\Models\HasilKarya; use App\Models\Penjemputan; +use App\Models\PenilaianCeklis; use Illuminate\Support\Facades\Storage; class GuruController extends Controller @@ -58,6 +59,34 @@ public function storeKarya(Request $request) return response()->json(['success' => true, 'message' => 'Karya berhasil disimpan']); } + public function storeCeklis(Request $request) + { + // Validasi disesuaikan dengan struktur tabel penilaian_ceklis kamu + $request->validate([ + 'siswa_id' => 'required|exists:siswas,id', + 'tanggal' => 'required|date', + 'indikator' => 'required|string', + 'hasil' => 'required|in:BB,MB,BSH,BSB', // Validasi skala PAUD + 'keterangan'=> 'nullable|string', + ]); + + // Simpan data ke database + $ceklis = PenilaianCeklis::create([ + 'siswa_id' => $request->siswa_id, + 'guru_id' => $request->user()->id, // Ambil ID dari Guru yang login + 'tanggal' => $request->tanggal, + 'indikator' => $request->indikator, + 'hasil' => $request->hasil, + 'keterangan'=> $request->keterangan, + ]); + + return response()->json([ + 'success' => true, + 'message' => 'Penilaian Ceklis berhasil disimpan', + 'data' => $ceklis + ], 201); + } + // 3. Input Penjemputan (Scan QR) public function storePenjemputan(Request $request) { diff --git a/app/Http/Controllers/Api/SiswaController.php b/app/Http/Controllers/Api/SiswaController.php index 8d60aba..3223719 100644 --- a/app/Http/Controllers/Api/SiswaController.php +++ b/app/Http/Controllers/Api/SiswaController.php @@ -4,15 +4,42 @@ use App\Http\Controllers\Controller; use App\Models\Siswa; +use App\Models\WaliMurid; // Tambahkan Model Wali Murid use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; // Tambahkan Auth class SiswaController extends Controller { public function index() { - // Mengambil semua data siswa beserta data walinya - $siswa = Siswa::with(['wali_murid', 'kelompok'])->get(); + // 1. Cek siapa yang sedang login (ambil dari Token) + $user = Auth::user(); + // 2. Logika Pembeda Data + if ($user->role == 'guru') { + // --- JIKA GURU --- + // Ambil SEMUA data siswa (untuk menu "Data Kelas") + $siswa = Siswa::with(['wali_murid', 'kelompok'])->latest()->get(); + + } else { + // --- JIKA WALI MURID --- + // Cari data profil Wali Murid yang sesuai dengan User ID yang login + // Asumsi: Tabel 'wali_murids' punya kolom 'user_id' + $wali = WaliMurid::where('user_id', $user->id)->first(); + + if ($wali) { + // Ambil siswa yang punya ID Wali Murid tersebut + $siswa = Siswa::with(['wali_murid', 'kelompok']) + ->where('wali_murid_id', $wali->id) + ->latest() + ->get(); + } else { + // Kalau data walinya belum di-link, kasih kosong aja biar gak error + $siswa = []; + } + } + + // 3. Kirim hasilnya ke Flutter return response()->json([ 'success' => true, 'data' => $siswa diff --git a/app/Models/Siswa.php b/app/Models/Siswa.php index 809bc68..e782b5c 100644 --- a/app/Models/Siswa.php +++ b/app/Models/Siswa.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use App\Models\Kelas; class Siswa extends Model { @@ -20,8 +21,9 @@ public function wali_murid() // TAMBAHKAN INI: Relasi ke Kelompok/Kelas public function kelompok() { - // Ganti 'Kelas' jika nama model kelas kamu berbeda - return $this->belongsTo(Kelas::class, 'kelompok_id'); + // 2. Hubungkan ke Model 'Kelas' + // 3. Pakai kunci 'kelas_id' (sesuai yang ada di file Kelas.php kamu) + return $this->belongsTo(Kelas::class, 'kelas_id'); } public function anekdots() diff --git a/app/Models/User.php b/app/Models/User.php index 8435cf9..4089058 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,29 +2,27 @@ namespace App\Models; -// use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; + class User extends Authenticatable { - use HasApiTokens, HasFactory, Notifiable; + use HasApiTokens; + use HasFactory; + use Notifiable; + + /** - * GANTI FILLABLE DENGAN GUARDED - * Agar kolom 'role' bisa diisi oleh Controller + * Kita pakai guarded kosong biar aman mass assignment */ - // protected $fillable = [ ... ]; <-- HAPUS ATAU KOMENTAR INI - - // ✅ PAKAI INI (Jurus Open Gate): - protected $guarded = []; + protected $guarded = []; /** * The attributes that should be hidden for serialization. - * - * @var array */ protected $hidden = [ 'password', @@ -33,20 +31,8 @@ class User extends Authenticatable 'two_factor_secret', ]; - /** - * The accessors to append to the model's array form. - * - * @var array - */ - protected $appends = [ - 'profile_photo_url', - ]; - /** - * Get the attributes that should be cast. - * - * @return array - */ + protected function casts(): array { return [ diff --git a/database/migrations/2026_02_13_185527_create_personal_access_tokens_table.php b/database/migrations/2026_02_13_185527_create_personal_access_tokens_table.php new file mode 100644 index 0000000..40ff706 --- /dev/null +++ b/database/migrations/2026_02_13_185527_create_personal_access_tokens_table.php @@ -0,0 +1,33 @@ +id(); + $table->morphs('tokenable'); + $table->text('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable()->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/routes/api.php b/routes/api.php index ea3339f..8d62aa5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -25,13 +25,14 @@ // --- KHUSUS WALI MURID (Lihat Data) --- // Wali melihat daftar anaknya -Route::get('/siswa-saya', [SiswaController::class, 'index']); + // ========================================== // 2. AREA TERKUNCI (BUTUH TOKEN) // ========================================== Route::middleware('auth:sanctum')->group(function () { // --- UMUM --- + Route::get('/siswa-saya', [SiswaController::class, 'index']); // Pindah ke sini biar bisa baca Auth::user() Route::post('/logout', [AuthController::class, 'logout']); Route::get('/user', function (Request $request) { return $request->user(); // Cek siapa yang login @@ -49,4 +50,5 @@ Route::post('/guru/anekdot', [GuruController::class, 'storeAnekdot']); Route::post('/guru/karya', [GuruController::class, 'storeKarya']); Route::post('/guru/penjemputan', [GuruController::class, 'storePenjemputan']); -}); \ No newline at end of file + Route::post('/guru/ceklis', [GuruController::class, 'storeCeklis']); +});