D
Pendahuluan

Overview

Backend (Go) adalah API service WhatsApp chat gateway dan live-chat CRM — dipanggil sebagai url_api (/v1/) oleh frontend dazoapp.

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

AspekPenjelasan
IdentitasModul Go aplikasiwa-api, repo api-golang-dazo
PosisiAntara WhatsApp gateway (Node, :5002/:5003/:5004) dan frontend dazoapp
Tenant3 stack paralel — default, _admin, _crm
DatastoreMongoDB primer (DB dazo, CRM crm_dazo)
QueueRedis + BullMQ (dijalankan Node engine, bukan Go)
AuthJWT HS256 — validasi-only, issued by dazoapp

Arsitektur

text
WhatsApp Gateway (:5002 / :5003 / :5004)
        ↕ HTTP
Go API (:8081)  ←→  MongoDB (dazo / crm_dazo)
        ↕ shared collections
Node Engine (cron + BullMQ workers)
        ↕ Redis

Tiga tenant berjalan paralel dalam satu binary Go yang sama — dibedakan via suffix route _admin / _crm dan koneksi MongoDB terpisah untuk CRM.

Stack teknologi

LapisanTeknologi
BahasaGo 1.22 (toolchain go1.23.5)
Web frameworkFiber v2.51
DatabaseMongoDB via mongo-driver v1.14
Legacy SQLGORM + MySQL (dormant — ConnectDB dikomentari di main.go:43)
ConfigViper v1.18 + .env
AuthJWT HS256 (golang-jwt/jwt/v5 + gofiber/contrib/jwt)
Validasigo-playground/validator v9.31
LoggingZap v1.27 + lumberjack (rotasi file)
Rate limitinggolang.org/x/time/rate (token bucket, 8 msg/s untuk broadcast)
File storageAWS S3 via aws-sdk-go-v2
Hot reloadAir
DeployGitHub Actions → self-hosted runner, systemd + PM2

Komponen utama

KomponenLokasiCatatan
Entry pointmain.go (52 baris)Fiber app, koneksi Mongo, route setup
Configconfig/config.goViper, .env wajib
Routesroutes/routes.go (133 baris)Semua POST /v1/*, JWT middleware global
Handlershandlers/ (23 file, ~15.650 baris)Logika bisnis — “fat handlers”
Modelsmodels/ (28 file)mongo_*.go (BSON) + legacy GORM
Mongomongo/mongo.go (69 baris)Koneksi per GO_ENV
Middlewaremiddlewares/authMiddleware.goVerifyToken
Internal serviceinternal/service/chat_service.goCS rotator (least-loaded / weighted)
Utilsutils/Validasi, Spintax, JWT claims, rate limiter
Loggerlogger/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.go yang 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.