Files
bij/docs/migration/parity-checklist.md
2026-04-21 05:59:39 +07:00

136 lines
5.1 KiB
Markdown

# Checklist uji parity API mobile (CI3 `Json.php` ↔ CI4)
Gunakan DB & data yang sama. Bandingkan **string body JSON** (atau parse lalu diff struktur) antara:
- CI3: `POST .../index.php/json/{endpoint}`
- CI4: `POST .../json/{endpoint}` atau `POST .../api/mobile/{endpoint}`
Aktifkan logging sementara: set **`API_PARITY_LOG=true`** di `.env`, lalu cek `writable/logs/api_parity-YYYY-MM-DD.log` (hanya diisi oleh request **HTTP** ke `MobileJsonController`, bukan oleh CLI).
**Otomatisasi staging:** jalankan `php spark api:staging-validate` (dan opsional `--with-uploads`) — hasil mesin di `writable/staging/last-validation.json`; ringkasan manusia di `parity-report.md`.
---
## Aturan umum verifikasi
- [ ] Kunci JSON sama (tidak ada field tambahan di CI4 kecuali kesalahan tak terduga).
- [ ] Tipe: `status` integer 0/1; `pesan` string; array/objek nested sama.
- [ ] `utf8ize` / string Latin-1: bandingkan escape `\uXXXX` jika ada karakter non-ASCII.
- [ ] Tanpa `JSON_PRETTY_PRINT` di lingkungan development CI4 untuk string match (sudah dipaksa `json_encode(..., 0)` di controller).
---
## 1. login
- [ ] **Request:** `username`, `password` (POST).
- [ ] **Gagal:** `{ "status": 0, "pesan": "Username atau Password tidak sesuai" }` (tanpa `token`).
- [ ] **Sukses:** `status` 1, `pesan` "Selamat datang", `token` string panjang (md5(id)+15 char).
- [ ] **DB:** kolom `token` & `last_login` ter-update.
## 2. login_w_token
- [ ] **Request:** `token`.
- [ ] **Gagal token:** `status` 0, `pesan` "".
- [ ] **Sukses:** `status` 1, `pesan` "" (tanpa objek pegawai di root — sama CI3).
## 3. profil
- [ ] **Request:** `token`.
- [ ] **Gagal:** `status` 0, `pesan` "", tanpa `pegawai`.
- [ ] **Sukses:** `pegawai` dengan nested `kantor`, `jabatan`, `unit_kerja`, `lembur`, `dilapangan` (boolean), `jadwal` (objek dengan `hari`, `masuk`, `pulang`, `istirahat`, `toleransi_masuk`, `toleransi_pulang`, `libur`, `ket_libur` jika ada).
- [ ] **Perilaku libur perusahaan:** pada hari libur nasional/perusahaan, `ket_libur` terisi; `libur` tetap `true` seperti CI3 (tidak di-set `false` di cabang libur).
## 4. presensi_today
- [ ] **Request:** `token`.
- [ ] **Sukses:** `data` objek; jika baru insert, `id_presensi` string bentuk `"12."` (angka + titik).
- [ ] **Kolom null/string:** konsisten dengan baris DB yang sama di CI3.
## 5. presensi
- [ ] **Request:** `token`.
- [ ] **Ada data:** `status` 1, `data` array (maks 20).
- [ ] **Tanpa data:** `status` 0, tanpa kunci `data` (sama CI3).
## 6. save_masuk
- [ ] **Request:** `token`, `nama_photo`, `photo` (base64), `lat`, `lng`, `jarak`.
- [ ] **Tanpa pegawai / tanpa jadwal:** `status` 0, `pesan` "Tidak ada jadwal kerja".
- [ ] **Upload gagal:** `pesan` "Photo Kehadiran GAGAL upload" (dua spasi).
- [ ] **Sukses:** file di `public/assets/uploads/absen/masuk/`, `status` 1.
- [ ] **Catatan:** CI3 tidak mengembalikan URL file di JSON — hanya `pesan`; CI4 sama.
## 7. save_pulang
- [ ] Sama pola upload + pesan gagal/sukses.
- [ ] **Belum waktunya pulang:** `pesan` persis: `Belum waktunya Pulang, waktu pulang anda adalah pukul {jam}. Jika anda memerlukan...` (titik setelah jam).
## 8. save_istirahat
- [ ] **Request:** `token`, `mulai`, `selesai`.
- [ ] **Sukses normal:** `status` 1, `pesan` "berhasil disimpan".
- [ ] **Catatan CI4:** jika `mulai` dan `selesai` keduanya kosong, CI4 **tidak** menjalankan `UPDATE` (menghindari error); CI3 PHP 7 bisa memicu perilaku tak terdefinisi — dokumentasi di `parity-report.md`.
## 9. save_aktifitas
- [ ] Folder `public/assets/uploads/aktifitas/`, pesan sukses/gagal sama.
## 10. save_cuti
- [ ] Folder `public/assets/uploads/dokcuti/`, insert `cuti` + `cuti_dokumen`.
## 11. batalkan_cuti
- [ ] **Request:** `token`, `id`.
- [ ] **Sukses:** `pesan` berisi `Ajuan di batalkan {id} - {id_pegawai}`.
## 12. berita
- [ ] **Request:** `token`, `dari`, `jumlah` (opsional kosong → default seperti CI3).
- [ ] **Token valid:** `status` 1 selalu, `data` array (boleh kosong).
## 13. cuti
- [ ] **Token valid:** `status` 1, `data` array; tiap item bisa punya `dokumen` array.
- [ ] **Tanpa baris cuti:** `data` = `[]`.
## 14. lembur
- [ ] Sama seperti berita/cuti untuk pagination & `status` 1 + `data`.
## 15. libur
- [ ] **Token valid:** `status` 1, `data` seluruh tabel libur (urutan `tanggal_libur` desc).
## 16. aktifitas
- [ ] `status` 1 + `data` untuk token valid.
## 17. daftar_today
- [ ] **Request:** `token`.
- [ ] **Ada rekan dengan presensi hari ini:** `status` 1, `data` array join pegawai/jabatan/presensi.
- [ ] **Kosong:** `status` 0 (sama CI3).
## 18. save_pp
- [ ] Folder `public/assets/uploads/pengguna/`, hapus foto lama jika ada.
- [ ] Pesan gagal upload: "Photo Kehadiran GAGAL upload" (teks sama CI3 meskipun konteks profil).
## 19. save_password
- [ ] **Request:** `token`, `pass_lama`, `pass_baru`.
- [ ] **Default gagal (token salah):** `pesan` "-".
- [ ] **Password lama salah:** pesan sesuai CI3.
- [ ] **Sukses:** `status` 1, pesan "Password berhasil di ubah".
---
## Ringkasan
| Total endpoint | 19 |
|----------------|----|
| Verifikasi wajib | POST + JSON body + efek samping DB/file |
**Status readiness setelah uji manual:** centang kolom “lulus” per lingkungan sebelum cutover.