D
Engineering

Multi-tenant

Tenant dibedakan via store_id pada collection utama. Isolasi oleh query aplikasi, bukan database terpisah. Tidak ada middleware yang otomatis scope store_id — developer harus filter manual.

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:

js
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:

json
{
  "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:

KoleksiScope wajib
customersstore_id
Productsstore_id (read-only)
cartsstore_id + wa_customer
Ordersstore_id + customer_id / device_id
Order_Itemsvia order_id → order scope
agentsstore_id
settingsstore_id

In-memory state — tidak tenant-safe

StateKeyMasalah
userBuffercustomer_idRequest tenant/device berbeda dapat tercampur
lastRequestPerCustomercustomer_idDedup 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

Aspekdazoappbackend-goengine-bot
Tenant scopestore_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