Koleksi customers menyimpan customer per store — nomor WhatsApp, nama, metadata, dan tags. Tenant scope via store_id.
Model
models/customers.js:3 — CustomerSchema, mongoose.model("customers", CustomerSchema).
Field
| Field | Tipe | Nullable | Catatan |
|---|---|---|---|
id | String | ❌ | Primary key (UUID) — required: true |
store_id | String | ❌ | Tenant scope — required: true |
wa | String | ❌ | Nomor WhatsApp — required: true |
name | String | ❌ | Nama customer — required: true |
type | String | ❌ | Default "Customer" |
category | String | ❌ | Default "private" |
email | String | ✅ | Default null |
tags | Array | ❌ | Default [] |
other | Array | ❌ | Default [] — metadata bebas |
latest_contact | Date | ✅ | Default null |
created_at | Date | ❌ | Default Date.now |
updated_at | Date | ❌ | Default Date.now |
deleted_at | Date | ✅ | Default null — soft delete |
Catatan
deleted_atdipakai untuk soft delete — query harus filterdeleted_at: nullbila hanya ingin customer aktiflatest_contactdiupdate saat ada interaksi barutagsarray bebas — tidak ada schema enforcement untuk nilai tagotherarray metadata bebas — bentuk tidak konsisten antar store
Cara akses di service
// service/customer.js (atah di controller)
const customer = await Customer.findOne({
id: customerId,
store_id: storeId,
deleted_at: null,
});Multi-tenant
Shared dengan dazoapp dan backend-go
Koleksi customers di-shared dengan dazoapp (writer utama) dan backend-go. Engine Bot membaca + kadang menulis (auto-create customer dari percakapan baru). Lihat Database.
Kembali ke
- Schema Index — daftar semua koleksi
- Multi-tenant — tenant scope