# Task Breakdown: 07 - Manajemen Token Kiosk & QR

**Referensi Dokumen:** FR-07, NFR-02.4, NFR-02.5
**Tujuan:** Mengelola peng-generasian nilai *alphanumeric hash* sebagai basis operasional QR Card fisik dan otorisasi *Browser Kiosk*.

## 1. Controllers & Actions
- [ ] Buat `QrTokenController` (`super_admin` / `operator`).
  - Route `POST` regenerate untuk `Teacher` & `Student`.
  - Route `GET` untuk download gambar *QR Image* yang terkait di backend (bisa menggunakan *simple-qrcode* atau mengembalikan file view print-ready ber-layout).
- [ ] Buat `KioskTokenController` (`super_admin`).
  - CRUD penciptaan string otorisasi (device name, `token`, dan `expires_at`).

## 2. QR Regenerate Action (Atomic Service)
- [ ] Buat *class Service/Action* bernama `QrRegenerateAction`:
  - Fungsinya mencari token aktif saat ini milik entitas tertentu (misal Student X), lalu jalankan perintah sinkron dengan *Database Transaction*:
    1. Set Token lama ke status `is_active = false`.
    2. Penciptaan Token Baru menggunakan algoritma String acak (`Str::random(64)`) dengan status `is_active = true`.
  - Logika ini wajib kebal dari isu *race-condition*. Selalu satu individu satu token aktif.
- [ ] Buat Observer Pembuatan Entitas Dasar (Teacher/Student):
  - Saat `Teacher`/`Student` baru di-*insert* manual, *bypass trigger* pembuatan row token QR pertamanya di `TEACHER_QR_TOKENS` otomatis tanpa harus diminta admin.

## 3. Acceptance Criteria
- [ ] Admin / Operator memiliki tombol "Regenerate" di halaman profil murid/guru yang ketika diklik sukses menukar status `active` dan melahirkan token log baru.
- [ ] Kiosk Token *expired date* bisa disesuaikan waktu umurnya.
