backend-go (Go module: aplikasiwa-api) adalah API service ekosistem Dazo — WhatsApp chat gateway sekaligus live-chat CRM backend. Service ini diakses frontend dazoapp sebagai url_api (/v1/) dan berkomunikasi dua arah dengan WhatsApp gateway di port :5002/:5003/:5004.
Peran di ekosistem
| Aspek | Penjelasan |
|---|---|
| Identitas | Modul Go aplikasiwa-api, repo api-golang-dazo |
| Posisi | Antara WhatsApp gateway (Node, :5002/:5003/:5004) dan frontend dazoapp |
| Tenant | 3 stack paralel — default, _admin, _crm |
| Datastore | MongoDB primer (DB dazo, CRM crm_dazo) |
| Queue | Redis + BullMQ (dijalankan Node engine, bukan Go) |
| Auth | JWT HS256 — validasi-only, issued by dazoapp |
Arsitektur
WhatsApp Gateway (:5002 / :5003 / :5004)
↕ HTTP
Go API (:8081) ←→ MongoDB (dazo / crm_dazo)
↕ shared collections
Node Engine (cron + BullMQ workers)
↕ RedisTiga tenant berjalan paralel dalam satu binary Go yang sama — dibedakan via suffix route _admin / _crm dan koneksi MongoDB terpisah untuk CRM.
Stack teknologi
| Lapisan | Teknologi |
|---|---|
| Bahasa | Go 1.22 (toolchain go1.23.5) |
| Web framework | Fiber v2.51 |
| Database | MongoDB via mongo-driver v1.14 |
| Legacy SQL | GORM + MySQL (dormant — ConnectDB dikomentari di main.go:43) |
| Config | Viper v1.18 + .env |
| Auth | JWT HS256 (golang-jwt/jwt/v5 + gofiber/contrib/jwt) |
| Validasi | go-playground/validator v9.31 |
| Logging | Zap v1.27 + lumberjack (rotasi file) |
| Rate limiting | golang.org/x/time/rate (token bucket, 8 msg/s untuk broadcast) |
| File storage | AWS S3 via aws-sdk-go-v2 |
| Hot reload | Air |
| Deploy | GitHub Actions → self-hosted runner, systemd + PM2 |
Komponen utama
| Komponen | Lokasi | Catatan |
|---|---|---|
| Entry point | main.go (52 baris) | Fiber app, koneksi Mongo, route setup |
| Config | config/config.go | Viper, .env wajib |
| Routes | routes/routes.go (133 baris) | Semua POST /v1/*, JWT middleware global |
| Handlers | handlers/ (23 file, ~15.650 baris) | Logika bisnis — “fat handlers” |
| Models | models/ (28 file) | mongo_*.go (BSON) + legacy GORM |
| Mongo | mongo/mongo.go (69 baris) | Koneksi per GO_ENV |
| Middleware | middlewares/authMiddleware.go | VerifyToken |
| Internal service | internal/service/chat_service.go | CS rotator (least-loaded / weighted) |
| Utils | utils/ | Validasi, Spintax, JWT claims, rate limiter |
| Logger | logger/ | Zap + lumberjack |
Cara kerja singkat
Inbound (WA → app): WhatsApp gateway memanggil POST /v1/callback_message → handler CallbackMessage menyimpan ke chat_inbox + menjalankan CS rotator + dispatch bot.
Outbound (app → WA): handler Go menulis row ke chat_outbox → MongoDB change stream → Node dispatcher.js enqueue ke Redis BullMQ → worker_message.js POST ke WA gateway :5002 → sukses: chat_inbox.status_ack = "sent", hapus row outbox.
Detail alur ada di Message Flow.
Langkah berikutnya
- Baru mulai? Baca Setup Environment — ada konstanta hardcoded di
handlers/environtment.goyang gitignored. - Sudah punya env? Lanjut ke Local Development.
- Akan deploy? Baca Deployment — branch produksi
v3, ada 2 job paralel. - Engineer baru wajib baca Multi-tenant sebelum menyentuh handler.