Koleksi Products menyimpan katalog lengkap — harga, variant, stock, shipping dimensions, digital attachment, dan followUp config per metode pembayaran. Engine Bot membaca (read-only); writer utama adalah dazoapp.
Model
models/products.js:4 — productSchema, mongoose.model("Products", productSchema). Schema 291 baris — salah satu yang terbesar di repo.
Field utama
| Field | Tipe | Catatan |
|---|---|---|
id | String | Primary key (UUID) |
store_id | String | Tenant scope |
name | String | Nama produk |
product_code | String | SKU produk |
url | String | URL produk |
product_status | String | Status |
type | String | physical / digital |
normal_price | Number | Harga normal |
price_sale_status | Boolean | Status harga sale |
price_sale | Number | Default null — harga sale |
hpp | Number | Harga pokok |
price_type | String | Tipe harga |
stock | Number | Default 0 |
description | String | Default null |
attachment_link | String | Link digital product — dikirim ke customer saat payment success |
redirect_text | String | Teks redirect |
redirect_whatsapp | String | Default null |
device | String | Device assignment |
shortlink | String | Shortlink |
pixel | String | Default null — tracking pixel |
botWelcome | String | Default null |
warehouse_id | String | Gudang |
weight, width, length, height | Number | Dimensi untuk ongkir |
category_id
Array kategori:
category_id: [{
id: String,
name: String,
value: String, // untuk digital
label: String,
}]image
image: [{ name: String, default: null }]variant_products
Array variant:
| Field | Tipe | Catatan |
|---|---|---|
name_variant | String | Default null |
key | Array | Default [] |
SKU | String | Default null |
harga_normal | Number | Default 0 |
hpp | Number | Default 0 |
harga_spesial | Number | Default 0 |
stok | Number | Default 0 |
status | Boolean | Default false |
berat | Number | Default 0 — weight |
setUtama | Boolean | Default false — variant utama |
hasImage | Boolean | Default false |
id | String | Default null |
image | Array | [{ name: String }] |
variant_images
variant_images: [{ variant: String, name: String }]shipping
shipping: {
weight, w, l, h: Number, // dimensi
otomatic_price_shipping: Number,
shipping_type: String,
otomatic: Array,
flat: { price: Number },
addresses: {
id: Number,
province, city, district, subdistrict, postal_code, address: String
},
}shippingForm
Field shippingForm (models/products.js:205-245) berisi form state Vue — isDirty, errors, hasError, processing, wasSuccessful, recentlySuccessful, __rememberable. Ini adalah state serialization frontend, bukan data bisnis. Dapat diabaikan saat query bisnis.
payment_method
payment_method: [{ name: String, status: Boolean, default: false }]Array metode pembayaran yang aktif untuk produk.
followUp
followUpSchema (models/products.js:73-204) — struktur sama dengan Orders followUp, per metode (bank_transfer, cod, epayment) per checkpoint (welcome, order_detail, follow_up_1–follow_up_4, processing, completed, up_selling, redirect). Hanya field text (String, tanpa default).
rotatorData
rotatorData: {
role: String,
team: Array,
distribution: Array,
type_distribution: String,
}CS rotator config per produk.
Read-only di engine-bot
Inkonsistensi yang diketahui
| Masalah | Detail |
|---|---|
Product dipakai tanpa import | Salah satu branch getProductCatalog (service/product.js) — akan throw ReferenceError |
shippingForm Vue state di-persist | Field form state frontend terkirim ke backend dan tersimpan |
deleted_at sebagai String | models/products.js:277 — deleted_at: { type: String, default: null }, bukan Date |
Kembali ke
- Schema Index — daftar semua koleksi
- Order Flow — cara variant dipakai di checkout
- External Services — shared dengan dazoapp