D
Bug Tracker

Bug Tracker

Daftar bug dan inkonsistensi yang ditemukan saat riset dokumentasi backend-go. Diurutkan per area, dengan status dan referensi lokasi.

Daftar bug dan inkonsistensi yang ditemukan saat riset dokumentasi backend-go. Diurutkan per area. Status: 🔴 belum diperbaiki / 🟡 dikonfirmasi / 🟢 diperbaiki.

Konfigurasi & Koneksi

#BugLokasiStatus
1MongoClientCrm nil — ConnectCrmDB() dikomentari, semua route _crm akan nil-pointer panicmain.go:50-53, mongo/mongo.go:64🔴
2DB name split-brain — handler pakai const DBname="dazo", service rotator pakai config.Env.DbName. Jika .env DB_NAME diubah, rotator baca DB berbedahandlers/environtment.go:6 vs internal/service/chat_service.go:84,112🔴
3log.Print(mongoURI) mencetak URI beserta password ke stdout setiap startupmongo/mongo.go:57🔴
4Kredensial DB hardcoded di source — username, password, host ada langsung di environtment.go (gitignored tapi ada di disk)handlers/environtment.go:11-15🟡
5GORM/MySQL ConnectDB() dikomentari di main.go:43 — 11 model legacy + 4 handler dead code masih ada tapi tidak terpakaimain.go:43, database/database.go, handlers/auth.go dll🟡
6Route GORM era SQL masih dikomentari di routes.go:121-156 — 36 baris dead coderoutes/routes.go:121-156🟡

Auth & Middleware

#BugLokasiStatus
7JWT algoritma tidak di-pin — keyfunc return secret tanpa cek token.Method. Algorithm confusion risk (RS256/none token bisa lolos)middlewares/authMiddleware.go:94-96🔴
8IP allowlist pakai header spoofable — X-Real-IP/X-Forwarded-For bisa di-set client. Tanpa reverse proxy yang menimpa, attacker bypass authmiddlewares/authMiddleware.go:62-71🔴
9GetJwtClaims type assertion salah — c.Locals("user") simpan jwt.Claims, tapi assertion ke *jwt.Token. Akan panic at runtime bila dipanggilutils/utils.go:67🔴
10CORS config invalid — AllowOrigins:"*" + AllowCredentials:true = browser reject. config.Env.AllowOrigins (sudah ada) dikomentarimain.go:31,35🔴
1133 route _admin + _crm skip auth sepenuhnya — tidak ada network-level isolation enforcementmiddlewares/authMiddleware.go:15-50🟡

Handler — Logika & Validasi

#BugLokasiStatus
12Dead validation check di 6 handler send — SubmitImage/Document/Audio/Video cek payload.File == "", SubmitLink cek payload.Link == "", SubmitLocation cek payload.Latitude == "" — semua assign ke errMessage lokal yang tidak pernah di-return. Field kosong lolos ke saveMessageMongochat_submit.go:103,153,202,251,300,349🔴
13Response placeholder send_broadcast — return "test submit" terlihat seperti lupa digantihandlers/broadcast.go:260🟡
14ErrInvalidBobot dideklarasi tapi tidak pernah di-return — strategi percentage saat totalBobot == 0 fall back ke selectBySame, bukan error. Inconsisteninternal/service/chat_service.go:29, 196-199🟡
15submitPoint tidak ada timeout/retry — pakai http.Post default. Jika WA gateway lambat, request blocking tanpa batashandlers/chat_live.go:2828🟡
16Tidak ada request-ID middleware — handler generate ID sendiri via GetUuid(). Tracking request lintas log sulithandlers/chat_callback.go:3032🟡
17ErrorHandler Fiber return 400 untuk semua error generic — tidak ada 500 untuk internal errormain.go:21-26🟡

Model & Schema

#BugLokasiStatus
18Duplicate bson: tag di GlobalAssignationStruct.Distribution — bson:"distribution"bson:"distribution" tanpa pemisah spasi. Go parse tag pertama, tapi typo berbahayamodels/mongo_settings.go:8🔴
19LocationName dan LocationAddress tidak punya bson: tag — tidak di-persist ke Mongo (json only)models/mongo_chatinbox.go:54-55🟡
20Username punya tag gorm:"" — sisa era GORM, tidak ada bson: tag. Field dead di Mongomodels/mongo_chatinbox.go:69🟡
21Koleksi broadcast_scedulers typo persisten — “scedulers” (harusnya “schedulers”). Merasuk ke nama collection produksi, dipertahankan untuk kompatibilitashandlers/broadcast.go:57 + models/mongo_broadcast_sceduler.go🟡
22Field naming non-standard — IdUser, IdCs, IdGudang, Iduser, Idpaket (camelCase mix) vs store_id, chat_status (snake_case). Tidak konsisten lintas koleksimodels/*.go🟡
23Waktu disimpan sebagai string, bukan ISODate — format tidak konsisten antar handlermodels/mongo_chatinbox.go:38 dll🟡

Arsitektur & DI

#BugLokasiStatus
24Repo DI di-inject tapi tidak pernah dipakai — chatService.chatRepo/userRepo di constructor, tapi GetRotator akses Mongo langsung (chat_service.go:84,112). DI jadi dekorasi tanpa efekinternal/service/chat_service.go:21-24, 84, 112🔴
253x duplikasi handler — chat_live.go + _admin.go + _crm.go hampir identik. Perubahan default harus di-propagasi manual ke 2 varian. Tidak ada shared abstractionhandlers/chat_*.go🟡
26Dead code era GORM — handlers/auth.go (Login pakai database.DB dormant), contact.go, user.go, label.gohandlers/auth.go, contact.go, user.go, label.go🟡

Deploy & CI

#BugLokasiStatus
27PM2 first-start bug — $PROJECT_DIR_PRODUCTION dipakai di pm2 start (baris 60) tapi variabel ini GitHub vars, bukan env shell. Saat PM2 first-start (service belum ada), path resolve gagal.github/workflows/deploy_production.yml:60🔴
28fetch() di handlers/chat.go:95 URL hardcoded produksi https://enginemd.aplikasiwa.com/ — bukan EngineUri const. Meski dead code, kalau di-uncomment akan kirim ke URL produksi dari dev lokalhandlers/chat.go:95🟡

Inkonsistensi API Response

#BugLokasiStatus
29Error bisnis return 200 dengan "result": false, bukan 4xx. Hanya validasi (422), auth (401), scheduler (400/404/500) yang pakai status code non-200. Tidak ada standardisasihandlers/*.go🟡
30broadcast/scheduler pakai status/message, endpoint lain pakai result/message. Response envelope tidak konsistenhandlers/broadcast.go:231 vs lainnya🟡
31HandleChat response result memantul payload.HandleByBot (bisa false), bukan selalu true — tidak intuitifhandlers/chat_live.go:2206🟡

Security

#BugLokasiStatus
32Route callback_message skip auth — dipanggil WA gateway, tapi tidak ada signature verification. Siapa pun yang tahu URL bisa spoof inboundmiddlewares/authMiddleware.go:49, routes.go:38🔴
33handlers/environtment.go berisi kredensial DB plain text — gitignored tapi kalau file bocor, kredensial ter-exposehandlers/environtment.go:11-15🟡

Status legenda

SimbolArti
🔴Belum diperbaiki
🟡Dikonfirmasi / diketahui (mungkin by design, atau risiko rendah)
🟢Diperbaiki

Cara menambah bug baru

Saat menemukan bug baru, tambahkan ke tabel area terkait. Format:

plaintext
| # | Deskripsi singkat | `file:line` | 🔴 |

Jangan hapus entry yang sudah diperbaiki — ubah statusnya jadi 🟢 dan tambahkan catatan commit fix.

Hubungan dengan Tech Debt

Halaman ini mencatat bug spesifik (tempat, gejala). Halaman Tech Debt mencatat rencana pembenahan (urutan, prasyarat, strategi). Bug di sini menjadi input untuk tech debt roadmap.