Tampilan
Roadmap Migrasi
Roadmap bertahap untuk memodernisasi backend ATE secara aman, mengikuti pendekatan incremental / strangler-fig. Urutan fase dirancang agar setiap langkah meningkatkan keamanan langkah berikutnya.
Fase 0 — Stabilisasi & Fondasi
Tujuan: amankan sistem & buat jaring pengaman sebelum mengubah apa pun.
| Item | Aksi | Referensi |
|---|---|---|
| Inventaris cron | Dokumentasikan crontab production aktual ke dalam repo (mis. file crontab.example) | Background Jobs |
| Secret management | Pindahkan secret ke vault/secret manager; rotasi kredensial yang pernah ter-commit | Known Issues #3 |
| Amankan route Zimbra | Tambahkan auth/IP allowlist pada /api/v1/zimbras/* | Known Issues #2 |
| Observability | Tambah structured logging, error tracking (mis. Sentry), metrics, alerting untuk job & callback | — |
| Characterization tests | Tulis test untuk alur kritikal: login, checkout, callback Xendit, reset kuota, parsing log | test/ |
| CI gate | Tambah test + lint ke GitHub Actions sebelum deploy; tambah langkah migrasi terkontrol | .github/workflows/ |
| Snapshot skema | pg_dump --schema-only production sebagai sumber kebenaran skema | Migrasi Sequelize |
| Backup otomatis | Pastikan backup DB terjadwal & teruji restore | — |
Jangan lewati Fase 0
Tanpa observability dan test, semua perubahan di fase berikutnya menjadi berisiko tinggi pada sistem production.
Fase 1 — Modernisasi Internal (in-place)
Tujuan: upgrade fondasi teknis tanpa mengubah perilaku eksternal.
| Item | Aksi |
|---|---|
| Upgrade Node LTS | Naik dari Node 14 ke Node LTS terbaru (mis. 20/22). Uji kompatibilitas dependency, perbaiki breaking changes. |
| Audit & upgrade dependency | npm audit, naikkan versi (Express, Sequelize, dll.), hapus yang tak terpakai (bull, mysql2 bila benar tak dipakai). |
| Standardisasi error & response | Satukan ke satu helper response & satu mekanisme error handling. |
| Queue yang andal | Ganti DB-queue + child-process dengan BullMQ + Redis (atau queue terkelola), dengan retry, dead-letter, dan observability. |
| Scheduler proper | Pindahkan jadwal cron ke scheduler yang versioned di repo (mis. node-cron worker terdedikasi atau BullMQ repeatable jobs), bukan crontab tak terlihat. |
| TypeScript bertahap | Adopsi TypeScript per modul (mulai dari util/helper), aktifkan strict secara bertahap. |
| Bersihkan skema | Selesaikan drift model vs migrasi; deprecate tabel tak terpakai (TransEmailLogs, JobDetails) setelah konfirmasi. |
| Containerisasi | Bungkus app dalam Docker untuk konsistensi environment dev → prod. |
Fase 2 — Strangler Modul Baru
Tujuan: bangun kapabilitas baru/terisolasi di stack terbaru, di belakang gateway.
| Item | Aksi |
|---|---|
| API gateway/router | Tempatkan reverse proxy/gateway di depan monolith untuk merutekan per-endpoint. |
| Pilih modul kandidat | Mulai dari modul dengan coupling rendah & nilai tinggi (mis. reporting/observability atau service relay/pengiriman). |
| Implementasi modul baru | Bangun service baru (stack terbaru) memakai dokumentasi ini sebagai spesifikasi; pakai DB/skema yang sama atau kontrak API yang jelas. |
| Pindahkan trafik bertahap | Canary/percentage rollout per endpoint, dengan kemampuan rollback cepat. |
| Idempotensi webhook | Saat memindahkan callback (Xendit/SparkPost), pastikan pemrosesan idempoten. |
Fase 3 — Konsolidasi & Cleanup
Tujuan: pensiunkan bagian lama, rapikan, dan dokumentasikan ulang.
| Item | Aksi |
|---|---|
| Pensiunkan kode lama | Hapus modul monolith yang sudah di-strangle. |
| Hapus dead code | Bersihkan blok comment, controller/route tak terpakai, typo folder (biliings). |
| Dokumentasi final | Perbarui situs dokumentasi ini agar mencerminkan arsitektur baru. |
| Hardening keamanan | Review menyeluruh auth (masa berlaku token, RBAC), rate limiting, input validation. |
Urutan prioritas singkat
- Sekarang juga (Fase 0): observability, backup, amankan route Zimbra & secret, inventaris cron.
- Berikutnya (Fase 1): Node LTS + dependency, queue andal, scheduler versioned.
- Menengah (Fase 2): strangler untuk 1 modul percontohan.
- Akhir (Fase 3): konsolidasi & cleanup.
Target stack (usulan)
| Komponen | Sekarang | Target usulan |
|---|---|---|
| Runtime | Node 14 | Node LTS (20/22) |
| Bahasa | JavaScript | TypeScript |
| Queue | DB Jobs + child process | BullMQ + Redis |
| Scheduler | Crontab VPS | Scheduler versioned (repo) |
| Deploy | SSH + PM2 (VPS) | Container (Docker) + orkestrasi/CI yang punya test gate |
| ORM | Sequelize 6 | Sequelize terbaru / Prisma (evaluasi) |
| Observability | Winston + log file | Structured logging + error tracking + metrics |
Catatan
Pemilihan ORM target (tetap Sequelize vs pindah Prisma) sebaiknya diputuskan setelah Fase 0–1 berdasarkan kebutuhan tim dan kompleksitas query yang ada. Evaluasi terpisah disarankan sebelum komit.