# Fix Absensi Guru - Route Configuration Issue

## Masalah
Ketika guru melakukan absensi dan klik tombol "Absen Masuk", data tidak terbaca dan tidak tersimpan ke database.

## Penyebab
Route configuration di `routes/web.php` memiliki masalah urutan. Custom routes (`check-today`, `get-settings`, dll) didefinisikan SETELAH resource route `Route::resource('absensi-guru', ...)`, yang menyebabkan Laravel menganggap route custom sebagai parameter resource dan tidak mengarahkan ke method yang benar.

## Solusi
Memindahkan custom routes SEBELUM resource route agar Laravel dapat mengenali route dengan benar.

### Perubahan di `routes/web.php`

**SEBELUM (Salah):**
```php
Route::middleware('role:admin,guru,kepala_perpustakaan')->group(function () {
    Route::get('absensi-guru/check-today', [AbsensiGuruController::class, 'checkToday'])->name('absensi-guru.check-today');
    Route::get('absensi-guru/get-settings', [AbsensiGuruController::class, 'getSettings'])->name('absensi-guru.get-settings');
    Route::get('absensi-guru/rekap', [AbsensiGuruController::class, 'rekap'])->name('absensi-guru.rekap');
    Route::get('absensi-guru/sakit', [AbsensiGuruController::class, 'sakit'])->name('absensi-guru.sakit');
    Route::get('absensi-guru/izin', [AbsensiGuruController::class, 'izin'])->name('absensi-guru.izin');
    Route::resource('absensi-guru', AbsensiGuruController::class)->only(['index', 'create', 'store', 'destroy']);
    Route::post('absensi-guru/{absensiGuru}/pulang', [AbsensiGuruController::class, 'absenPulang'])->name('absensi-guru.pulang');
});
```

**SESUDAH (Benar):**
```php
Route::middleware('role:admin,guru,kepala_perpustakaan')->group(function () {
    // Custom routes MUST be before resource routes
    Route::get('absensi-guru/check-today', [AbsensiGuruController::class, 'checkToday'])->name('absensi-guru.check-today');
    Route::get('absensi-guru/get-settings', [AbsensiGuruController::class, 'getSettings'])->name('absensi-guru.get-settings');
    Route::get('absensi-guru/rekap', [AbsensiGuruController::class, 'rekap'])->name('absensi-guru.rekap');
    Route::get('absensi-guru/sakit', [AbsensiGuruController::class, 'sakit'])->name('absensi-guru.sakit');
    Route::get('absensi-guru/izin', [AbsensiGuruController::class, 'izin'])->name('absensi-guru.izin');
    Route::post('absensi-guru/{absensiGuru}/pulang', [AbsensiGuruController::class, 'absenPulang'])->name('absensi-guru.pulang');
    
    // Resource routes
    Route::resource('absensi-guru', AbsensiGuruController::class)->only(['index', 'create', 'store', 'destroy']);
});
```

## Langkah Perbaikan

1. **Edit routes/web.php**
   - Pindahkan semua custom routes SEBELUM resource route
   - Tambahkan komentar untuk menjelaskan urutan yang benar

2. **Clear Route Cache**
   ```bash
   php artisan route:clear
   ```

3. **Verifikasi Routes**
   ```bash
   php artisan route:list --name=absensi-guru
   ```

## Routes yang Terdaftar (Setelah Fix)

```
GET|HEAD   simaju/absensi-guru                           simaju.absensi-guru.index
POST       simaju/absensi-guru                           simaju.absensi-guru.store
GET|HEAD   simaju/absensi-guru/check-today               simaju.absensi-guru.check-today
GET|HEAD   simaju/absensi-guru/create                    simaju.absensi-guru.create
GET|HEAD   simaju/absensi-guru/create-manual             simaju.absensi-guru.create-manual
GET|HEAD   simaju/absensi-guru/get-settings              simaju.absensi-guru.get-settings
GET|HEAD   simaju/absensi-guru/izin                      simaju.absensi-guru.izin
GET|HEAD   simaju/absensi-guru/rekap                     simaju.absensi-guru.rekap
GET|HEAD   simaju/absensi-guru/sakit                     simaju.absensi-guru.sakit
POST       simaju/absensi-guru/store-manual              simaju.absensi-guru.store-manual
POST       simaju/absensi-guru/{absensiGuru}/pulang      simaju.absensi-guru.pulang
DELETE     simaju/absensi-guru/{absensi_guru}            simaju.absensi-guru.destroy
```

## Testing

1. Login sebagai guru
2. Akses halaman Absensi Guru (`/simaju/absensi-guru/create`)
3. Pastikan kamera aktif dan wajah terdeteksi
4. Pastikan GPS aktif
5. Klik tombol "Absen Masuk Sekarang"
6. Verifikasi data tersimpan di database dan muncul di halaman index

## Catatan Penting

**Aturan Laravel Route Priority:**
- Routes yang lebih spesifik harus didefinisikan SEBELUM routes yang lebih general
- Custom routes harus didefinisikan SEBELUM resource routes
- Resource routes akan menangkap pattern URL yang match dengan pattern mereka

**Contoh Pattern Matching:**
```
absensi-guru/check-today  → Jika setelah resource: dianggap sebagai {absensi_guru}
absensi-guru/check-today  → Jika sebelum resource: match ke route custom
```

## Status
✅ **FIXED** - Route configuration sudah diperbaiki dan absensi guru sekarang berfungsi dengan normal.

Tanggal: 4 Agustus 2026
