D
Setup

Local Development

Cara menjalankan backend-go secara lokal — Go API di satu proses, Node engine terpisah via PM2 atau node langsung, plus batasan apa yang tidak bisa dites.

Menjalankan backend-go butuh dua proses terpisah: Go API (HTTP server) dan Node engine (cron + BullMQ worker). Keduanya berbagi MongoDB, tapi tidak saling memanggil langsung.

Menjalankan Go API

bash
# dengan hot reload (rekomendasi)
air

# atau langsung
go run main.go

Go API listens di 0.0.0.0:<PORT> (default :8081, lihat main.go:62).

Air — hot reload

Konfigurasi Air di .air.toml:

PengaturanNilaiEfek
cmdgo build -o ./tmp/main.exe .Build ke tmp/
bintmp\main.exeBinary yang dijalankan
exclude_dirassets, tmp, vendor, testdata, engine, node_modulesFolder tidak di-watch
include_extgo, tpl, tmpl, htmlEkstensi yang memicu rebuild

Folder engine/ sengaja di-exclude — Node engine punya proses sendiri.

Menjalankan Node engine

Node engine ada di engine/, dijalankan per-worker:

bash
cd engine
npm install

# jalankan tiap worker (terminal terpisah atau PM2)
node cron_mdv2.js          # outbox polling → WA gateway :5002
node cron_botV2.js         # chatbot automation
node cron_broadcast.js     # broadcast scheduler
# dll.

Mengelola via PM2 (opsional)

Untuk menjalankan semua worker sekaligus:

bash
pm2 start engine/cron_mdv2.js --name cron_mdv2
pm2 start engine/cron_botV2.js --name cron_botV2
# dll.
pm2 status

Verifikasi setelah mengubah kode

Tidak ada CI test. Setelah mengubah kode, jalankan:

bash
go build -o /dev/null .     # compile check (tidak menghasilkan binary)
go vet ./...                # static analysis

Service eksternal — batasan lokal

Go API bergantung pada beberapa service eksternal:

ServiceKonstantaPortFungsi
WhatsApp gatewayEngineUri:5002Terima callback_message, kirim pesan via submitPoint
CRM engineEngineUriCRM:5003Update chatlist, broadcast CRM
Chatbot engineEngineBot:1313AI agent dispatch
MongoDB—:27017Datastore primer
Redis—(Node engine)BullMQ queue
AWS S3AWS_*—Upload file

Apa yang bisa dites tanpa WA gateway

FiturBisa?Catatan
Auth JWT validasiYaButuh token dari dazoapp
CRUD chat (baca inbox/list)YaButuh MongoDB berisi data
Submit pesan (write chat_outbox)YaTapi pesan tidak terkirim tanpa Node engine
Upload S3YaButuh kredensial AWS valid
Broadcast schedulerYaTapi fan-out gagal tanpa WA gateway

Apa yang TIDAK bisa dites tanpa service ini

FiturService yang dibutuhkan
Pesan benar-benar terkirim ke WAWA gateway :5002 + Node engine (BullMQ worker)
Inbound message dari WAWA gateway memanggil POST /v1/callback_message
Chatbot auto-replyChatbot engine :1313
Broadcast fan-outWA gateway :5002

Tenant CRM — batasan krusial

mongo.ConnectCrmDB() dikomentari di main.go:50-53 — artinya mongo.MongoClientCrm nil. Semua route _crm yang menyentuh CRM DB akan panic.

Untuk testing lokal: hindari route _crm, atau uncomment ConnectCrmDB() + sediakan MongoDB crm_dazo terpisah. Lihat Multi-tenant dan Tech Debt.

Debug

  • Log Zap ke file di logs/ (rotasi via lumberjack). Lihat logger/logger.go.
  • mongo.go:57 log URI MongoDB beserta password saat startup — known issue, jangan andalkan ini untuk debug produksi.
  • Handler memakai log.Println / logger.Log ad-hoc. Tidak ada request-ID middleware.

Struktur direktori utama (non-engine)

text
main.go                      # entry: Fiber + Mongo + routes
config/config.go             # Viper .env
routes/routes.go             # POST /v1/* + JWT middleware
handlers/                    # 23 file, ~15.650 baris — fat handlers
models/                      # 28 file: mongo_*.go (BSON) + legacy GORM
mongo/mongo.go               # koneksi MongoDB per GO_ENV
middlewares/                 # VerifyToken
internal/service/            # CS rotator
utils/                       # validasi, Spintax, rate limiter
logger/                      # Zap + lumberjack

Langkah berikutnya

  • Siap deploy? Baca Deployment — branch produksi v3, ada 2 job paralel.
  • Akan kerja fitur? Wajib baca Multi-tenant sebelum menyentuh handler.