finished get status for batch devices endpoint

This commit is contained in:
faris Aljohari
2024-09-17 09:18:40 +03:00
parent 446564c984
commit d1cdc1375a
3 changed files with 46 additions and 0 deletions

View File

@ -21,6 +21,7 @@ import {
import {
ControlDeviceDto,
BatchControlDevicesDto,
BatchStatusDevicesDto,
} from '../dtos/control.device.dto';
import { CheckRoomGuard } from 'src/guards/room.guard';
import { CheckUserHavePermission } from 'src/guards/user.device.permission.guard';
@ -275,4 +276,19 @@ export class DeviceController {
);
}
}
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@Get('status/batch')
async batchStatusDevices(
@Query() batchStatusDevicesDto: BatchStatusDevicesDto,
) {
try {
return await this.deviceService.batchStatusDevices(batchStatusDevicesDto);
} catch (error) {
throw new HttpException(
error.message || 'Internal server error',
error.status || HttpStatus.INTERNAL_SERVER_ERROR,
);
}
}
}

View File

@ -38,3 +38,10 @@ export class BatchControlDevicesDto {
@IsNotEmpty()
public value: any;
}
export class BatchStatusDevicesDto {
@ApiProperty({
example: 'uuid1,uuid2,uuid3',
description: 'Comma-separated list of device UUIDs',
})
devicesUuid: string;
}

View File

@ -24,6 +24,7 @@ import {
} from '../dtos/get.device.dto';
import {
BatchControlDevicesDto,
BatchStatusDevicesDto,
ControlDeviceDto,
} from '../dtos/control.device.dto';
import { convertKeysToCamelCase } from '@app/common/helper/camelCaseConverter';
@ -362,7 +363,29 @@ export class DeviceService {
);
}
}
async batchStatusDevices(batchStatusDevicesDto: BatchStatusDevicesDto) {
const { devicesUuid } = batchStatusDevicesDto;
const devicesUuidArray = devicesUuid.split(',');
try {
await this.checkAllDevicesHaveSameProductUuid(devicesUuidArray);
const statuses = await Promise.all(
devicesUuidArray.map(async (deviceUuid) => {
const result = await this.getDevicesInstructionStatus(deviceUuid);
return { deviceUuid, result };
}),
);
return {
status: statuses[0].result,
devices: statuses,
};
} catch (error) {
throw new HttpException(
error.message || 'Device Not Found',
error.status || HttpStatus.NOT_FOUND,
);
}
}
async checkAllDevicesHaveSameProductUuid(deviceUuids: string[]) {
const firstDevice = await this.deviceRepository.findOne({
where: { uuid: deviceUuids[0] },