D
Engineering

Tech Debt Roadmap

Rencana pembenahan codebase 5-tahap, diurutkan risiko rendah ke tinggi. Setiap item punya status, prasyarat, dan referensi file.

Codebase dazoapp berjalan di produksi dan diwariskan turun-temurun tanpa code review. Rencana pembenahan ini diurutkan risiko rendah → tinggi, bukan berdasarkan seberapa mengganggu. Tujuannya: menjaga pembenahan tidak menghentikan pengiriman fitur.

Aturan utama: Jangan gabungkan pembenahan dengan pengembangan fitur dalam satu commit. Pisahkan agar mudah di-revert bila ada regresi.


Tahap 1 — Dokumentasi (nol risiko)

#ItemStatusCatatan
1README.md dazoapp✅ Selesai691 baris, konteks lengkap ekosistem
2resources/js/global.example.js + .env.example (87 variabel hilang)⬜ Belumglobal.js gitignored tanpa contoh, diimpor 105 file. .env.example masih DB_CONNECTION=mysql. Onboarding blocker
3CONTRIBUTING.md — konvensi koding tim⬜ BelumPenamaan file/komponen, kapan bikin komponen baru vs pakai yang ada, batas ukuran file, bahasa komentar & commit

Tahap 2 — Jaring pengaman (risiko rendah)

#ItemStatusPrasyaratCatatan
4Test untuk wallet, order, webhook pembayaran⬜ BelumPrasyarat semua tahap berikutnya. Tanpa ini, refactor = tebakan. Test coverage saat ini hampir nol (hanya AspireTest.php)
5Pasang linter/formatter⬜ BelumPint sudah ada di require-dev tapi belum dipakai. ESLint + Prettier belum ada. Jalankan pada file baru saja dulu, jangan format ulang seluruh repo
6Rotasi API token Cloudflare hardcoded + tinjau route login-as-user⬜ BelumToken Cloudflare hardcoded di 4 file. Route login-as-user pakai path acak sebagai pengaman (routes/api.php:92-93), security-by-obscurity
7Pusatkan URL service ke config/services.php⬜ BelumHilangkan pola if (env == production) di ~20 controller. Host produksi engine WhatsApp belum konsisten (engine.dazo.id vs engine-wa.dazo.id). Lihat External Services

Tahap 3 — Bersih-bersih (risiko rendah, tidak sentuh fitur)

#ItemStatusCatatan
8Hapus skrip debug/mockup/backup dari root⬜ BelumTambahkan polanya ke .gitignore
9Perbaiki state/store.js:4 — bug nyata satu baris⬜ Belumimport notification from './modules/layout' harusnya ./modules/notification. Lihat Bug Tracker #1
10Lepas resources-creative/⬜ BelumPindahkan 34 file terpakai ke resources/js/, perbaiki 55 import, hapus direktori. Menghilangkan ±143.400 baris (rasio manfaat tertinggi)
11Hapus kode mati lain⬜ BelumPages/Biolink copy/, 4 layout orphan, dependensi vue-router & concurrently
12Buang sisa template di resources/⬜ Belum±4.200 baris SCSS mati + 15 dataset demo di js/common/data/

Tahap 4 — Konsolidasi (risiko sedang)

Prasyarat: Tahap 2 (test) wajib selesai sebelum mulai tahap ini.

#ItemStatusPrasyaratCatatan
13Lepas right-bar.vue (theme customizer Velzon)⬜ Belum#4Vuex bisa dihapus seluruhnya setelah ini. Pinia sudah jadi state default
14Arahkan axios polos (42 file) ke services/axiosInstance.js⬜ Belum#4Agar refresh token JWT tertangani seragam. Lihat JWT Lifecycle
15Pilih satu library chart dan satu editor⬜ Belum#4Migrasikan pemakaian lain secara bertahap
16Satukan komponen kembar (modal, loader, input)⬜ Belum#4Mulai dari yang paling sedikit dipakai. Lihat Konvensi

Tahap 5 — Struktural (risiko tinggi)

Prasyarat: Tahap 2 (test) wajib selesai. Kerjakan per modul, bukan big-bang.

#ItemStatusPrasyaratCatatan
17Pecah Pages/Order/Main.vue (9.668 baris) & OrderController.php (2.987 baris)⬜ Belum#4Lihat Order Lifecycle untuk pemetaan alur
18Pindahkan logika bisnis dari komponen Vue ke service backend⬜ Belum#4Mayoritas logic ada di controller, bukan service. Lihat Konvensi
19Dokumentasikan bentuk dokumen MongoDB per koleksi🟡 BerjalanTidak ada migration sebagai acuan. Lihat Schema MongoDB
20Tinjau QUEUE_CONNECTION=sync⬜ BelumPastikan sesuai dengan keberadaan service worker. Saat ini job berjalan sinkron dalam request

Yang sudah diketahui rusak

Tidak perlu dilaporkan ulang sebagai temuan baru — lihat daftar lengkap di Bug Tracker.

Yang perlu perhatian keamanan

  • Route login-as-user (routes/api.php:92-93) — /afEqVLZBoQyNVCkXpbtiWuNhiZYKaiLqYwFAP/{id} dan /sFfsmkGVzExKomNGFQWpkEidsTeEhkam. Menerbitkan JWT penuh atas nama user mana pun tanpa middleware auth. Security-by-obscurity, dan path-nya ada di repo
  • FORGOT_OTP_DEBUG_BYPASS — pastikan tidak aktif di produksi

Referensi