Tidak ada migration sebagai acuan skema di backend-go. Bentuk dokumen diturunkan dari BSON struct di models/mongo_*.go. Halaman ini mendokumentasikan 4 koleksi kritis.
Konvensi umum
- Semua model memakai tag
bson:+json:— field name di Mongo snake_case, di JSON juga snake_case - Primary key: field
id(string UUID) — bukan_idMongo default _idMongo tetap ada (auto ObjectId), tapi handler query berdasarkanidstring- Tidak ada timestamp otomatis — handler set
Waktumanual (string time) - Tidak ada index DB yang didefinisikan di kode. Multi-tenant scoping via
store_idhanya di layer aplikasi - Field nullable memakai pointer (
*string,*int) — bukan zero value
Koleksi terdokumentasi
| Koleksi | Model | Dipakai untuk | Status |
|---|---|---|---|
chat_inbox | models/mongo_chatinbox.go ChatInboxStruct | Pesan masuk + keluar + status ACK | Aktif |
chat_outbox | models/mongo_chatoutbox.go ChatOutboxStruct | Antrian pesan keluar (di-poll Node engine) | Aktif |
devices | models/mongo_device.go DeviceStruct | Device WhatsApp terdaftar | Aktif |
settings | models/mongo_settings.go SettingsStruct | Setting store + CS distribution + pixel | Aktif |
Koleksi lain (belum terdokumentasi)
| Koleksi | Model | Catatan |
|---|---|---|
chat_list | mongo_chatlist.go | Daftar percakapan per customer |
chat_histories | mongo_chathistory.go | Riwayat lifecycle chat |
chat_orders | mongo_chatorder.go | Order dari chat |
chat_checkouts | mongo_chat_checkout.go | Checkout dari chat |
customers | mongo_customer.go | Data customer |
products | mongo_product.go | Produk |
orders | mongo_order.go | Order + order_items |
notifications | mongo_notif.go | Notif chat/order/subscription |
broadcast_scedulers | mongo_broadcast_sceduler.go | Broadcast terjadwal (typo preserved) |
broadcast_messages | mongo_broadcast.go | Pesan broadcast |
handle_gudang | mongo_handlegudang.go | Eskalasi warehouse |
pixels | mongo_pixel.go | Tracking pixel |
users | mongo_user.go | User |
Inkonsistensi lintas-koleksi
| Masalah | Detail |
|---|---|
broadcast_scedulers typo | Nama koleksi misspelled (harusnya “schedulers”) — dipertahankan untuk kompatibilitas |
| Field naming non-standard | IdUser, IdCs, IdGudang, Iduser, Idpaket (camelCase mix) vs store_id, chat_status (snake_case) |
Waktu sebagai string | Bukan ISODate — string time, format tidak konsisten |
Status vs StatusAck | chat_inbox punya keduanya — Status int (read/unread) vs StatusAck string (pending/sent/error) |
| Pointer vs zero value | Field nullable pakai *string/*int, tapi beberapa field pakai zero value (string kosong) untuk nullable |
Shared dengan Node engine
Koleksi chat_inbox dan chat_outbox di-shared dengan Node engine tanpa schema validation. Lihat Message Flow untuk kontrak implisit.
Catatan verifikasi
Field yang ditulis di luar handler yang diperiksa mungkin terlewat. Verifikasi dengan db.<collection>.findOne() di staging sebelum dokumentasi ini dijadikan acuan.