Koleksi admin_devices adalah fallback untuk device yang tidak ada di koleksi devices. Schema identik dengan devices dengan field tambahan status.
Model
src/model/admin_devices.model.ts:
const Admin_Device = new Schema<DeviceCollection>({
id: { type: String, required: true, index: true },
iduser: { type: String, required: true },
store_id: { type: String, required: true },
token: { type: String, required: true },
no_wa: { type: String, required: true },
is_connected: { type: String, required: true },
status: { type: Number, required: true }, // ← field ekstra
updated_at: { type: Date },
});
export const DeviceAdminModel = model<DeviceCollection>(
'Admin_Device', // nama model
Admin_Device,
); // nama koleksi tidak eksplisit — Mongoose auto-pluralizeField
| Field | Tipe | Wajib | Index | Catatan |
|---|---|---|---|---|
id | String | ✅ | ✅ | UUID = instanceId — primary key logis |
iduser | String | ✅ | — | ID user pemilik device |
store_id | String | ✅ | — | ID store/toko |
token | String | ✅ | — | Token device |
no_wa | String | ✅ | — | Nomor WhatsApp |
is_connected | String | ✅ | — | "Connected" / "Disconnected" (string) |
status | Number | ✅ | — | 0 = disconnected, 1 = connected — field ekstra tidak ada di devices |
updated_at | Date | ❌ | — | Timestamp update terakhir |
_id | ObjectId | auto | — | Mongo default |
Perbedaan dengan devices
| Aspek | devices | admin_devices |
|---|---|---|
Field status | ❌ | ✅ (0/1) |
| Nama model | 'devices' | 'Admin_Device' |
| Nama koleksi | 'devices' (eksplisit) | 'admin_devices' (auto-pluralize) |
| Dipakai saat | Device ada di devices | Fallback bila tidak ada di devices |
Cara engine memakai
src/service/whatsappService.ts — di handler connection.update, saat DeviceService.findOne(instanceId) return null:
// Saat connection === 'open' (device tidak ada di devices)
await DeviceService.updateDeviceAdmin(instanceId, {
no_wa: phoneNumber,
is_connected: 'Connected',
status: 1, // ← set status juga
});
// Saat connection === 'close'
await DeviceService.updateDeviceAdmin(instanceId, {
no_wa: '',
is_connected: 'Disconnected',
status: 0,
});Service — DeviceService.updateDeviceAdmin
src/service/devices/deviceServices.ts:44-65:
static async updateDeviceAdmin(instanceId: string, data: DeviceData) {
const payload = { ...data, updated_at: new Date() };
const updatedDevice = await DeviceAdminModel.findOneAndUpdate(
{ id: instanceId },
{ $set: payload },
{ new: true }
);
if (!updatedDevice) return null;
return updatedDevice;
}Kapan dipakai
Engine mencari devices dulu. Jika tidak ketemu, baru update ke admin_devices. Logika:
let deviceMember = await DeviceService.findOne(instanceId); // cari di devices
if (!deviceMember) {
// Tidak ada di devices → fallback ke admin_devices
await DeviceService.updateDeviceAdmin(instanceId, { ... });
} else {
// Ada di devices → update di devices
await DeviceService.update(instanceId, { ... });
}Shared dengan
| Service | Akses |
|---|---|
dazoapp (Laravel) | Writer utama |
engine-whatsapp | Update (fallback) — no_wa, is_connected, status |
Contoh dokumen
{
"_id": "65a1b2c3d4e5f6a7b8c9d0e2",
"id": "0c1a968c-7918-4c29-a524-0ad7c445ee7f",
"iduser": "user-123",
"store_id": "store-456",
"token": "device-token-xxx",
"no_wa": "628123456789",
"is_connected": "Connected",
"status": 1,
"updated_at": "2024-01-15T10:30:00.000Z",
"__v": 0
}Langkah berikutnya
devices(primary)? Baca devices.chat_inbox? Baca chat_inbox.chat_histories? Baca chat_histories.