Tampilan
Known Issues & Tech Debt
Daftar utang teknis, inkonsistensi, dan gotchas yang ditemukan saat audit codebase. Ini menjadi input penting untuk Roadmap Migrasi.
Prioritas tinggi (risiko / keamanan)
| # | Isu | Dampak | Lokasi |
|---|---|---|---|
| 1 | Node.js 14 EOL | Tidak ada security patch; banyak dependency modern tak didukung | package.json (engines: 14.x) |
| 2 | Route Zimbra tanpa auth | /api/v1/zimbras/* bisa diakses tanpa otentikasi (operasi provisioning sensitif) | routes/zimbraRoutes.js |
| 3 | Secret management | Kredensial di .env polos; perlu vault/secret manager | .env |
| 4 | Access token 1 menit | Refresh sangat sering; rawan masalah UX & beban | helpers/token.helper.js |
| 5 | Tidak ada test gate di CI | Deploy langsung git pull + reload tanpa test/build | .github/workflows/* |
| 6 | Migrasi DB manual | Mudah terlupa/inkonsisten antar environment | proses deploy |
Prioritas menengah (arsitektur / maintainability)
| # | Isu | Dampak | Lokasi |
|---|---|---|---|
| 7 | Queue fire-and-forget | Child process tanpa backpressure/retry/observability; job bisa hilang | helpers/cp.helper.js, job-runner.js |
| 8 | Bull terpasang tapi tak dipakai | Dependency menyesatkan; queue sebenarnya berbasis tabel Jobs | package.json |
| 9 | Scheduler in-process non-aktif | runnerJob.js stub; jadwal cron hanya di crontab VPS (tak terlihat di repo) | cron/scheduledFunctions/runnerJob.js |
| 10 | Penanganan error tidak konsisten | Campuran response.failed, JSON manual, dan CustomAPIError | seluruh controllers/ |
| 11 | Format response tidak konsisten | Sebagian response.helper, sebagian manual | seluruh controllers/ |
| 12 | Swagger coverage parsial | Dokumentasi API tidak lengkap, judul placeholder "Library API" | app.js, routes/*.js |
| 13 | Typo nama folder | controllers/biliings/ (kurang huruf l) | controllers/biliings/ |
Prioritas rendah (kebersihan data/skema)
| # | Isu | Dampak | Lokasi |
|---|---|---|---|
| 14 | Tabel TransEmailLogs tidak dipakai | Log nyata di ES; tabel jadi legacy membingungkan | models/transemaillog.js |
| 15 | Tabel JobDetails tidak dipakai | Scaffolding tak terpakai | models/jobdetail.js |
| 16 | Drift model vs migrasi | Enum TViewCompanyMailUsages berbeda; tipe uuid STRING vs UUID | berbagai model |
| 17 | Kolom duplikat | servicePeriode dideklarasi 2x di model | models/transcompanysubscriptions.js |
| 18 | Asosiasi tidak lengkap | UnlockCounter, TransCompanyTags, transCompanyInvoiceId tanpa relasi penuh | berbagai model |
| 19 | Default DB_PORT 3306 | Default port MySQL untuk DB PostgreSQL | helpers/config.helper.js |
| 20 | mysql2 di dependency | Tidak dipakai untuk DB utama (PostgreSQL) | package.json |
| 21 | Env var tak terdokumentasi | INTERNAL_API_KEY, SPARKPOST_WEBHOOK_*, AMC tidak ada di .env.example | .env.example |
Mirror Zimbra ganda
Production mem-mirror operasi ke dua instance Zimbra (AKTIVA & EXCELLENT). Logika ini implisit di helpers/zimbra.helper.js dan perlu didokumentasikan/diuji ekstra saat migrasi agar tidak ada akun yang tidak sinkron.
Catatan kualitas kode umum
- Banyak blok kode di-comment (mis. Swagger lama di
routes/index.js, cron schedule dirunnerJob.js). - Sebagian skrip cron punya komentar jadwal yang mungkin tidak sesuai dengan crontab production sebenarnya.
- Nama file/fungsi campur konvensi (camelCase, kebab-case).
Cara memakai daftar ini
Saat menyusun Roadmap Migrasi, prioritaskan isu prioritas tinggi di fase stabilisasi (Fase 0), lalu isu arsitektur di fase modernisasi (Fase 1).