D
Engineering

admin_devices Collection

Koleksi admin_devices — fallback bila instanceId tidak ada di devices. Punya field ekstra status (0/1). Schema identik devices + status.

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:

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-pluralize

Field

FieldTipeWajibIndexCatatan
idString✅✅UUID = instanceId — primary key logis
iduserString✅—ID user pemilik device
store_idString✅—ID store/toko
tokenString✅—Token device
no_waString✅—Nomor WhatsApp
is_connectedString✅—"Connected" / "Disconnected" (string)
statusNumber✅—0 = disconnected, 1 = connected — field ekstra tidak ada di devices
updated_atDate❌—Timestamp update terakhir
_idObjectIdauto—Mongo default

Perbedaan dengan devices

Aspekdevicesadmin_devices
Field status❌✅ (0/1)
Nama model'devices''Admin_Device'
Nama koleksi'devices' (eksplisit)'admin_devices' (auto-pluralize)
Dipakai saatDevice ada di devicesFallback bila tidak ada di devices

Cara engine memakai

src/service/whatsappService.ts — di handler connection.update, saat DeviceService.findOne(instanceId) return null:

ts
// 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:

ts
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:

ts
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

ServiceAkses
dazoapp (Laravel)Writer utama
engine-whatsappUpdate (fallback) — no_wa, is_connected, status

Contoh dokumen

json
{
  "_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