# SMAN 1 Garut – Backend Presensi Siswa Backend presensi siswa berbasis **CodeIgniter 4** untuk: - Presensi masuk/pulang & per‑mapel (QR). - Zona lokasi (geofence) & pengaturan jam masuk/pulang. - Akun mobile siswa (NISN + PIN). - Portal orang tua & poin pelanggaran. - Integrasi foto formal + verifikasi wajah (via service AI eksternal). Backend ini biasanya dipakai bersama: - Frontend mobile: folder `../mobile` (repo terpisah). - Face embedding service: folder `../face-service` (FastAPI + InsightFace). ## 1. Kebutuhan Server - PHP **8.2+** dengan ekstensi: - `intl`, `mbstring`, `json`, `curl`, `gd`, `mysqli`/`mysqlnd`. - MySQL/MariaDB. - Composer. ## 2. Setup Cepat (Development) Di folder `backend`: ```bash composer install cp env .env # atau copy manual ``` Edit `.env`: ```ini app.baseURL = 'http://localhost/sman1/backend/public/' database.default.hostname = localhost database.default.database = absen_sman1 database.default.username = root database.default.password = your_password telegram.bot_token = your_telegram_bot_token telegram_bot_token = your_telegram_bot_token FACE_SERVICE_URL = 'http://localhost:5000' FACE_EMBEDDING_DIM = 512 FACE_SIM_THRESHOLD = 0.85 FACE_MIN_SIZE = 80 FACE_MIN_BLUR = 30 FACE_MIN_BRIGHTNESS = 0.2 ``` Jalankan migration & seeder yang diperlukan: ```bash php spark migrate --all php spark db:seed DeviceSeeder php spark db:seed StudentMobileAccountsSeeder # opsional untuk dummy data ``` Jalankan server dev: ```bash php spark serve ``` Lalu akses: - Dashboard: `http://localhost:8080` atau `http://localhost/sman1/backend/public` (sesuai web server). - API mobile: `http://localhost/sman1/backend/public/api/mobile/...`. ## 3. Modul Utama - `Modules/Academic` – kelas, mapel, guru, jadwal, siswa, Dapodik. - `Modules/Attendance` – check‑in device, check‑in QR mapel, laporan, `student_faces` + verifikasi wajah. - `Modules/Mobile` – API mobile (login NISN+PIN, registrasi PIN, checkin‑qr, checkin‑masuk‑pulang, status hari ini). - `Modules/Devices` – device absen, autentikasi device (code + api_key). - `Modules/Dashboard` – halaman dashboard + pengaturan presensi (zona + jam masuk/pulang). - `Modules/Parent` – portal orang tua (riwayat presensi & pelanggaran). - `Modules/Discipline` – kategori pelanggaran, poin, rekap siswa. - `Modules/Notification` – integrasi Telegram. - `Modules/Face` – penyimpanan embedding wajah (`student_faces`) + endpoint import/enroll. Struktur detail endpoint dan flow presensi dijelaskan di: - `docs/SETUP_PRESENSI.md` (jika ada). - `docs/SYNC_FOTO_WAJAH.md` – cara sync foto formal dari Google Drive + face hash. ## 4. Integrasi Face Embedding Service Backend **tidak menghitung embedding wajah sendiri**, tapi memanggil service eksternal (lihat folder `../face-service`): - Service Python (`FACE_SERVICE_URL`) menyediakan endpoint: - `POST /embed` → menerima file gambar, mengembalikan: - `embedding` float[], - `faces_count`, `face_size`, `blur`, `brightness`, `quality_score`. - `App\Modules\Face\Services\FaceService`: - `extractEmbeddingWithQuality()` → kirim gambar ke `/embed`, terapkan quality gate. - `cosineSimilarity()` → untuk matching saat verify‑face. ### Alur singkat 1. **Import foto formal** (admin): `POST /api/face/import-formal` → ambil foto dari URL (Google Drive/hasil sync) → simpan embedding `source='formal'` ke `student_faces`. 2. **Enroll live** (siswa, 3–5 frame): `POST /api/face/enroll-live` → simpan beberapa embedding `source='live'` + satu `live_avg`. 3. **Verifikasi saat presensi**: `POST /api/attendance/verify-face` → bandingkan embedding probe dengan semua embedding siswa → kembalikan `similarity`, `matched_source`, `status (match/no_match)`. ## 5. Catatan Git & Deployment - File yang **tidak** ikut repo (lihat `.gitignore`): - `.env`, `writable/*`, `vendor/`, direktori IDE, dll. - Untuk produksi: - Pastikan PHP 8.2+, ekstensi lengkap, dan baseURL `.env` sudah sesuai domain sekolah. - Jalankan `php spark migrate --all` di server. - Jalankan face‑service Python di host/port yang sama dengan `FACE_SERVICE_URL` di `.env`. --- Kalau develop bareng frontend mobile, lihat juga `../mobile/README.md` untuk cara run klien presensi di HP/device.