# Paket Migrasi Sanggraloka One — Staging/UAT Lanjutan

Disiapkan 10 Jul 2026 dari state dev (XAMPP lokal), setelah 40 item UAT +
fitur selesai (lihat `sanggraloka.md` §12 Changelog v6.6). Ini migrasi ke
**staging/UAT lanjutan** (bukan go-live produksi final) — data QC/dummy
SENGAJA diikutkan sesuai keputusan owner, belum perlu pengerasan keamanan
penuh (lihat `docs/GO-LIVE.md` utk daftar itu, dikerjakan nanti saat go-live
sungguhan).

## Isi paket ini

| File | Isi | Ukuran |
|---|---|---|
| `sanggraloka_one_20260710.sql` | Dump lengkap DB (skema + SEMUA data, termasuk akun `qc.*` & baris DUMMY, 114 tabel, 34 migrasi tercatat) | ~700 KB |
| `sanggraloka-one-backend.zip` | Seluruh kode `backend/` (src/, public/, db/migrations/, bin/, storage/ — TERMASUK dokumen ter-upload). **`config/config.php` SENGAJA DIKELUARKAN** (berisi kredensial lokal) | ~4 MB |
| `hotelcrew-content-university-jobdesk.zip` | Isi `hotelcrew/docs/university/` + `hotelcrew/docs/jobdesk/` — **dependency runtime**, dibaca langsung tiap kali halaman University/Course/Jobdesk dibuka (`HrMaterialRenderer`), BUKAN sekadar sumber impor sekali jalan | ~2.2 MB |
| `config.staging-template.php` | Template config server tujuan — isi placeholder `{{...}}` | — |
| Panduan ini | Langkah deploy | — |

## Prasyarat server

- **PHP ≥ 8.2** dengan ekstensi: `pdo_mysql`, `json`, **`zip`** (kritis — dipakai export/import Excel di hampir semua halaman, tanpa ini banyak fitur gagal senyap), `mbstring`.
- **MySQL 8+ atau MariaDB 10.6+**.
- Web server Apache (dgn `mod_rewrite`, `mod_setenvif` aktif — lihat `.htaccess` di `public/`) ATAU Nginx (perlu rewrite manual setara, lihat catatan di bawah — proyek ini dev-only pernah diuji dgn PHP built-in server + `router.php`, BELUM ada config Nginx siap pakai).

## Langkah deploy

1. **Salin kode**: ekstrak `sanggraloka-one-backend.zip` ke server, mis. `/var/www/sanggraloka-one/backend/` (atau `C:\...\backend\` kalau Windows Server/IIS). **Document root web server HARUS menunjuk ke `backend/public/`**, bukan ke `backend/` (kode `src/` di luar document root, sesuai arsitektur — jangan diubah).

2. **Salin konten University**: ekstrak `hotelcrew-content-university-jobdesk.zip` sehingga hasilnya ada di path `{sibling folder dari sanggraloka-one}/hotelcrew/docs/university/` dan `.../jobdesk/` — PERSIS strukturnya `dirname(__DIR__, 3) . '/hotelcrew/docs'` dari `backend/config/config.php` (3 folder di atas `backend/config/` → naik ke folder tempat `sanggraloka-one/` berada, lalu masuk `hotelcrew/docs/`). Kalau strukturnya beda di server tujuan, override `content_root` di config.php ke path absolut yang benar.

3. **Import database**: buat database `sanggraloka_one` kosong di server, lalu:
   ```
   mysql -u <user> -p sanggraloka_one < sanggraloka_one_20260710.sql
   ```

4. **Config**: salin `config.staging-template.php` → `backend/config/config.php`, isi `{{BASE_URL}}`/`{{DB_HOST}}`/`{{DB_USER}}`/`{{DB_PASSWORD}}` sesuai server tujuan. `token_secret` biarkan sama (lihat komentar di template) kecuali mau invalidasi semua sesi API.

5. **Permission**: pastikan folder `backend/storage/` writable oleh user proses web server (mis. `www-data`) — dokumen upload baru (HR/asset/laundry/dsb) ditulis ke sini.

6. **Verifikasi hidup** (urutan disarankan):
   - Buka `/login.php` → login `qc.gm` / `password` (akun QC tetap aktif, staging).
   - Dashboard tampil, modal sapaan login muncul.
   - Buka `/university.php` → materi & test tampil (membuktikan `content_root` path benar).
   - Buka halaman mana pun dgn tombol "Export Excel" → file xlsx benar-benar terunduh (membuktikan `ext-zip` aktif).
   - Upload 1 dokumen di halaman Karyawan → berhasil & bisa dibuka lagi via link "Buka file" (membuktikan `storage/` writable + `file.php` gateway jalan).
   - Buka `/night-audit-import.php` → cek gate role & render tanpa error.

## Yang SENGAJA tidak dikerjakan di paket ini (staging, bukan go-live)

Item-item berikut ADA di `docs/GO-LIVE.md` tapi baru dikerjakan saat go-live produksi final, BUKAN sekarang:
- Paksa ganti sandi semua user (`UPDATE users SET must_change_password=1`).
- HTTPS/TLS wajib.
- Rotasi `token_secret` API.
- Jadwalkan `bin/generate-pm.php` / `bin/generate-recurring-tasks.php` ke cron/Task Scheduler produksi (di server dev ini masih dijalankan manual).

## Catatan

- Tidak ada `vendor/` (project ini zero-dependency Composer selain ekstensi PHP bawaan) — tak perlu `composer install`.
- Android app (kalau ikut dipasang) butuh base_url API baru + sertifikat pinning — di luar cakupan paket ini (lihat `docs/GO-LIVE.md` §2).
