D
Engineering

Schema MongoDB

Bentuk dokumen MongoDB per koleksi di engine-whatsapp. Tidak ada migration — sumbernya Mongoose schema di src/model. Mencakup devices, admin_devices, chat_inbox, chat_histories.

Tidak ada migration sebagai acuan skema di engine-whatsapp. Bentuk dokumen diturunkan dari Mongoose schema di src/model/*.model.ts. Halaman ini mendokumentasikan 4 koleksi yang dikelola engine.

Konvensi umum

  • Semua model memakai Mongoose — ada layer ODM tipis
  • Primary key: field id (string UUID) — bukan _id Mongo default
  • _id Mongo tetap ada (auto ObjectId), tapi query bisnis berdasarkan id string
  • chat_inbox memakai strict: false — field tambahan dari writer (backend-go) tetap tersimpan
  • Nama model di model() menentukan nama koleksi (Mongoose auto-pluralize + lowercase)

Koleksi terdokumentasi

KoleksiModelDipakai untukStatus
devicessrc/model/devices.model.tsDevice milik user — diupdate saat koneksi open/closeAktif
admin_devicessrc/model/admin_devices.model.tsFallback bila instanceId tidak ada di devices — punya field ekstra statusAktif
chat_inboxsrc/model/chatInbox.model.tsPesan — dibaca engine untuk cari temp_id. strict: falseAktif (read-only di engine)
chat_historiessrc/model/chatHistory.model.tsSesi percakapan per nomor — dibuat otomatis saat pesan masukAktif

devices vs admin_devices

Saat status koneksi berubah, engine mencari devices lebih dulu. Jika tidak ketemu, update diarahkan ke admin_devices:

Aspekdevicesadmin_devices
Field id✅ (UUID = instanceId)✅ (UUID = instanceId)
no_wa, is_connected✅✅
status (0/1)❌✅ (field ekstra)
iduser, store_id, token✅✅
Dipakai saatDevice ada di devicesFallback bila tidak ada di devices

Inkonsistensi yang diketahui

MasalahDetail
Nama model Admin_Devicemodel('Admin_Device', ...) → Mongoose auto-pluralize → koleksi admin_devices. Tapi export DeviceAdminModel — verifikasi nama koleksi aktual di DB
chat_inbox.strict: falseField tambahan dari writer (backend-go) tetap tersimpan tanpa validasi engine
Tidak ada index kompositQuery chat_histories filter store_id + instance + nohp + end_date + status tanpa compound index

Lihat Tech Debt untuk daftar lengkap.

Shared dengan dazoapp dan backend-go

KoleksiEngine WhatsAppDibagi dengan
devices✅ update no_wa, is_connecteddazoapp (writer), backend-go
admin_devices✅ update (fallback)dazoapp
chat_inboxread-only (cari temp_id)backend-go (writer)
chat_histories✅ createbackend-go

Catatan verifikasi

Field yang ditulis di luar model yang diperiksa mungkin terlewat — backend-go dapat menulis field tambahan ke chat_inbox (karena strict: false). Verifikasi dengan db.<collection>.findOne() di staging sebelum dokumentasi ini dijadikan acuan.

Langkah berikutnya

  • Detail per koleksi? Klik link di tabel di atas.
  • Cara koneksi DB? Baca Database.
  • Known issues? Baca Tech Debt.