engine-bot melayani multi-tenant dalam satu process yang sama. Tidak ada tenant resolution dinamis — tenant ditentukan oleh field store_id di request body.
Tenant scope
Tenant dibedakan melalui store_id pada collection utama. Isolation dilakukan oleh query aplikasi, bukan database terpisah:
const customer = await Customer.findOne({ id: customerId, store_id: storeId });
const cart = await Cart.find({ wa_customer: phone, store_id: storeId });
const order = await Order.findOne({ id: orderNumber, store_id: storeId });Semua query bisnis baru wajib menyertakan tenant scope dan, jika relevan, customer/device scope.
Tenant dari request body
store_id di-pass dari backend-go di request body:
{
"store_id": "store-1",
"customer_id": "628123456789",
"agent_id": "agent-1",
...
}functionRouteBot (controllers/mainController.js) memvalidasi keberadaan store_id, customer_id, dan agent_id sebelum memproses.
Tidak ada tenant authorization
Target: bind identity dan resource scope pada boundary sebelum domain logic berjalan.
Scope customer/device
Selain store_id, beberapa query juga perlu scope customer_id atau device_id:
| Koleksi | Scope wajib |
|---|---|
customers | store_id |
Products | store_id (read-only) |
carts | store_id + wa_customer |
Orders | store_id + customer_id / device_id |
Order_Items | via order_id → order scope |
agents | store_id |
settings | store_id |
In-memory state — tidak tenant-safe
| State | Key | Masalah |
|---|---|---|
userBuffer | customer_id | Request tenant/device berbeda dapat tercampur |
lastRequestPerCustomer | customer_id | Dedup tidak tenant-safe |
Keduanya hilang saat restart dan tidak dibagi antar multiple instances. Lihat Agent Architecture.
Cart/product scope tidak konsisten
Konteks vs dazoapp dan backend-go
| Aspek | dazoapp | backend-go | engine-bot |
|---|---|---|---|
| Tenant scope | store_id (795 pemakaian) | store_id (dari payload) | store_id (dari request body) |
| Middleware auto-scope | ❌ manual | ❌ manual | ❌ manual |
| Tenant authorization | ❌ belum | ❌ belum | ❌ belum |
| Tenant route | (single) | 3 tenant via suffix (_admin/_crm) | (single) |
Langkah berikutnya
- Pola kode? Baca Conventions.
- Cara validasi token? Baca Auth & JWT.
- Known issues? Baca Tech Debt.