D
Engineering

Schema MongoDB

Bentuk dokumen MongoDB per koleksi kritis di backend-go. Tidak ada migration — sumbernya BSON struct di models. Mencakup chat_inbox, chat_outbox, devices, settings.

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 _id Mongo default
  • _id Mongo tetap ada (auto ObjectId), tapi handler query berdasarkan id string
  • Tidak ada timestamp otomatis — handler set Waktu manual (string time)
  • Tidak ada index DB yang didefinisikan di kode. Multi-tenant scoping via store_id hanya di layer aplikasi
  • Field nullable memakai pointer (*string, *int) — bukan zero value

Koleksi terdokumentasi

KoleksiModelDipakai untukStatus
chat_inboxmodels/mongo_chatinbox.go ChatInboxStructPesan masuk + keluar + status ACKAktif
chat_outboxmodels/mongo_chatoutbox.go ChatOutboxStructAntrian pesan keluar (di-poll Node engine)Aktif
devicesmodels/mongo_device.go DeviceStructDevice WhatsApp terdaftarAktif
settingsmodels/mongo_settings.go SettingsStructSetting store + CS distribution + pixelAktif

Koleksi lain (belum terdokumentasi)

KoleksiModelCatatan
chat_listmongo_chatlist.goDaftar percakapan per customer
chat_historiesmongo_chathistory.goRiwayat lifecycle chat
chat_ordersmongo_chatorder.goOrder dari chat
chat_checkoutsmongo_chat_checkout.goCheckout dari chat
customersmongo_customer.goData customer
productsmongo_product.goProduk
ordersmongo_order.goOrder + order_items
notificationsmongo_notif.goNotif chat/order/subscription
broadcast_scedulersmongo_broadcast_sceduler.goBroadcast terjadwal (typo preserved)
broadcast_messagesmongo_broadcast.goPesan broadcast
handle_gudangmongo_handlegudang.goEskalasi warehouse
pixelsmongo_pixel.goTracking pixel
usersmongo_user.goUser

Inkonsistensi lintas-koleksi

MasalahDetail
broadcast_scedulers typoNama koleksi misspelled (harusnya “schedulers”) — dipertahankan untuk kompatibilitas
Field naming non-standardIdUser, IdCs, IdGudang, Iduser, Idpaket (camelCase mix) vs store_id, chat_status (snake_case)
Waktu sebagai stringBukan ISODate — string time, format tidak konsisten
Status vs StatusAckchat_inbox punya keduanya — Status int (read/unread) vs StatusAck string (pending/sent/error)
Pointer vs zero valueField 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.