From 15987f76428c8ebaa9da1a200054c041568095fb Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Sat, 24 Aug 2024 16:45:00 +0300 Subject: [PATCH] Update Device Service to Handle Promise Settlements and Add Battery Status for Door Locks --- src/device/services/device.service.ts | 31 +++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/device/services/device.service.ts b/src/device/services/device.service.ts index ff8bfed..db1b521 100644 --- a/src/device/services/device.service.ts +++ b/src/device/services/device.service.ts @@ -630,8 +630,26 @@ export class DeviceService { 'permission.permissionType', ], }); - const devicesData = await Promise.all( + const devicesData = await Promise.allSettled( devices.map(async (device) => { + let battery = null; + + // Check if the device is a door lock (DL) + if (device.productDevice.prodType === ProductType.DL) { + console.log('device', device.deviceTuyaUuid); + + const doorLockInstructionsStatus = + await this.getDevicesInstructionStatus(device.uuid); + + const batteryStatus: any = doorLockInstructionsStatus.status.find( + (status: any) => status.code === 'residual_electricity', + ); + + if (batteryStatus) { + battery = batteryStatus.value; + } + } + const spaceDevice = device?.spaceDevice; const parentDevice = spaceDevice?.parent; return { @@ -650,11 +668,20 @@ export class DeviceService { device.deviceTuyaUuid, )), uuid: device.uuid, + ...(battery && { battery }), } as GetDeviceDetailsInterface; }), ); - return devicesData; + // Filter out rejected promises and extract the fulfilled values + const fulfilledDevices = devicesData + .filter((result) => result.status === 'fulfilled') + .map( + (result) => + (result as PromiseFulfilledResult).value, + ); + + return fulfilledDevices; } catch (error) { throw new HttpException( error.message || 'Internal server error',