Troubleshooting (Decision Tree)
Gunakan format ini saat incident: Gejala → Kemungkinan Sebab → Langkah Cek → Fix.
1) Gejala: API return 403 Forbidden
Kemungkinan sebab:
- Role user tidak sesuai middleware
access:*. - Entitas terkait sudah soft-delete.
Langkah cek:
- Cek role user di DB.
- Cek middleware route endpoint.
- Cek entitas terkait soft-delete.
Contoh query verifikasi:
SELECT id, role FROM users WHERE id = :user_id;
SELECT id, deleted_at FROM projects WHERE id = :project_id;
Fix:
- Koreksi mapping role-permission.
- Pulihkan data soft-delete jika memang seharusnya aktif.
2) Gejala: PO tidak bisa update ke status tertentu
Kemungkinan sebab:
- Rule transisi status membatasi per role.
- Payload status tidak valid.
Langkah cek:
- Cek role user pelaku update.
- Cek state PO saat ini.
- Cek validator status di service/controller.
Contoh query verifikasi:
SELECT id, status, updated_at FROM purchase_orders WHERE id = :po_id;
Fix:
- Sesuaikan role/flow transisi di kode.
- Jika status baru ditambahkan, update state machine + validator.
3) Gejala: SPB tidak bisa diubah
Kemungkinan sebab:
- Status SPB sudah
approveddan dikunci sistem.
Langkah cek:
- Ambil status SPB terkini.
- Cek log request perubahan terakhir.
Contoh query verifikasi:
SELECT id, status, approved_at FROM spb WHERE id = :spb_id;
Fix:
- Ikuti flow revisi resmi (buat entitas revisi jika diperlukan).
- Jangan bypass lock tanpa approval senior.
4) Gejala: Notifikasi push tidak terkirim
Kemungkinan sebab:
- Token FCM tidak valid/expired.
- Credential Firebase invalid.
- Queue worker tidak berjalan.
Langkah cek:
- Cek token user target.
- Cek log error FCM.
- Cek antrean job.
Contoh query verifikasi:
SELECT user_id, token, updated_at
FROM fcm_tokens
WHERE user_id = :user_id
ORDER BY updated_at DESC
LIMIT 5;
Fix:
- Refresh token FCM.
- Perbaiki credential.
- Restart worker setelah root cause jelas.
5) Gejala: Export/PDF tidak muncul
Kemungkinan sebab:
- Permission storage bermasalah.
- Job export gagal.
- Dependency PDF/Excel tidak lengkap.
Langkah cek:
- Cek log job export.
- Cek file hasil di storage.
- Cek status queue.
Fix:
- Benahi permission direktori.
- Retry job yang aman diulang.
- Pastikan dependency terpasang.
6) Gejala: Payment stuck di waiting_confirmation
Kemungkinan sebab:
- Tahap approve/verify belum dieksekusi role yang tepat.
- Rule transisi status payment tertahan.
Langkah cek:
- Cek histori approval payment.
- Cek role aktor terakhir.
Contoh query verifikasi:
SELECT id, status, approved_by, verified_by, updated_at
FROM payments
WHERE id = :payment_id;
Fix:
- Lengkapi tahapan approval sesuai role matrix.
- Perbaiki rule transisi jika ada bug.
7) Gejala: Error migration saat deploy
Kemungkinan sebab:
- Konflik schema existing.
- Data legacy tidak kompatibel dengan constraint baru.
- Locking/timeout saat migrasi.
Langkah cek:
- Cek migration yang gagal + SQL error detail.
- Cek kondisi data sebelum constraint diterapkan.
- Cek durasi/lock query di DB.
Contoh query verifikasi:
-- contoh: cek data yang melanggar NOT NULL baru
SELECT COUNT(*)
FROM target_table
WHERE target_column IS NULL;
Fix:
- Terapkan pendekatan expand/contract.
- Jalankan backfill dulu sebelum constraint ketat.
- Jika dampak besar: rollback sesuai playbook.
Quick Triage Flow
Catatan
- Nama tabel/kolom query di atas bisa berbeda antar environment: perlu verifikasi dengan schema aktual.