mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-10 15:17:41 +00:00
364 lines
11 KiB
TypeScript
364 lines
11 KiB
TypeScript
import { ControllerRoute } from '@app/common/constants/controller-route';
|
|
import { EnableDisableStatusEnum } from '@app/common/constants/days.enum';
|
|
import { RoleType } from '@app/common/constants/role.type.enum';
|
|
import { BaseResponseDto } from '@app/common/dto/base.response.dto';
|
|
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
Param,
|
|
Post,
|
|
Put,
|
|
Query,
|
|
Req,
|
|
UnauthorizedException,
|
|
UseGuards,
|
|
} from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
|
|
import { Permissions } from 'src/decorators/permissions.decorator';
|
|
import { PermissionsGuard } from 'src/guards/permissions.guard';
|
|
import { CheckRoomGuard } from 'src/guards/room.guard';
|
|
import { CheckFourAndSixSceneDeviceTypeGuard } from 'src/guards/scene.device.type.guard';
|
|
import {
|
|
AddDeviceDto,
|
|
AddSceneToFourSceneDeviceDto,
|
|
AssignDeviceToSpaceDto,
|
|
UpdateDeviceDto,
|
|
} from '../dtos/add.device.dto';
|
|
import {
|
|
BatchControlDevicesDto,
|
|
BatchStatusDevicesDto,
|
|
ControlDeviceDto,
|
|
GetSceneFourSceneDeviceDto,
|
|
} from '../dtos/control.device.dto';
|
|
import { DeleteSceneFromSceneDeviceDto } from '../dtos/delete.device.dto';
|
|
import { DeviceSceneParamDto } from '../dtos/device.param.dto';
|
|
import { GetDeviceLogsDto } from '../dtos/get.device.dto';
|
|
import { DeviceService } from '../services/device.service';
|
|
|
|
@ApiTags('Device Module')
|
|
@Controller({
|
|
version: EnableDisableStatusEnum.ENABLED,
|
|
path: ControllerRoute.DEVICE.ROUTE,
|
|
})
|
|
export class DeviceController {
|
|
constructor(private readonly deviceService: DeviceService) {}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_BATCH_CONTROL')
|
|
@Post('batch')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.BATCH_CONTROL_DEVICES_SUMMARY,
|
|
description:
|
|
ControllerRoute.DEVICE.ACTIONS.BATCH_CONTROL_DEVICES_DESCRIPTION,
|
|
})
|
|
async batchControlDevices(
|
|
@Body() batchControlDevicesDto: BatchControlDevicesDto,
|
|
@Req() req: any,
|
|
) {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.batchControlDevices(
|
|
batchControlDevicesDto,
|
|
projectUuid,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_BATCH_CONTROL')
|
|
@Get('batch')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.BATCH_STATUS_DEVICES_SUMMARY,
|
|
description:
|
|
ControllerRoute.DEVICE.ACTIONS.BATCH_STATUS_DEVICES_DESCRIPTION,
|
|
})
|
|
async batchStatusDevices(
|
|
@Query() batchStatusDevicesDto: BatchStatusDevicesDto,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.batchStatusDevices(
|
|
batchStatusDevicesDto,
|
|
projectUuid,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_VIEW')
|
|
@Get('gateway/:gatewayUuid/devices')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.GET_DEVICES_IN_GATEWAY_SUMMARY,
|
|
description:
|
|
ControllerRoute.DEVICE.ACTIONS.GET_DEVICES_IN_GATEWAY_DESCRIPTION,
|
|
})
|
|
async getDevicesInGateway(
|
|
@Param('gatewayUuid') gatewayUuid: string,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.getDevicesInGateway(
|
|
gatewayUuid,
|
|
projectUuid,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_ADD')
|
|
@Post()
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.ADD_DEVICE_SUMMARY,
|
|
description: ControllerRoute.DEVICE.ACTIONS.ADD_DEVICE_DESCRIPTION,
|
|
})
|
|
async addNewDevice(
|
|
@Body() addDeviceDto: AddDeviceDto,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.addNewDevice(addDeviceDto, projectUuid);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard, CheckRoomGuard)
|
|
@Permissions('SUBSPACE_DEVICE_UPDATE_DEVICE_IN_SUBSPACE')
|
|
@Put(':deviceUuid/space/:spaceUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.UPDATE_DEVICE_IN_ROOM_SUMMARY,
|
|
description:
|
|
ControllerRoute.DEVICE.ACTIONS.UPDATE_DEVICE_IN_ROOM_DESCRIPTION,
|
|
})
|
|
async transferDeviceInSpaces(
|
|
@Param() updateDeviceInSpaceDto: AssignDeviceToSpaceDto,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.transferDeviceInSpaces(
|
|
updateDeviceInSpaceDto,
|
|
projectUuid,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_VIEW')
|
|
@Get(':deviceUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.GET_DEVICE_DETAILS_SUMMARY,
|
|
description: ControllerRoute.DEVICE.ACTIONS.GET_DEVICE_DETAILS_DESCRIPTION,
|
|
})
|
|
async getDeviceDetailsByDeviceId(
|
|
@Param('deviceUuid') deviceUuid: string,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.getDeviceDetailsByDeviceId(
|
|
deviceUuid,
|
|
projectUuid,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_UPDATE')
|
|
@Put(':deviceUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.UPDATE_DEVICE_SUMMARY,
|
|
description: ControllerRoute.DEVICE.ACTIONS.UPDATE_DEVICE_DESCRIPTION,
|
|
})
|
|
async updateDevice(
|
|
@Param('deviceUuid') deviceUuid: string,
|
|
@Body() updateDeviceDto: UpdateDeviceDto,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.updateDevice(
|
|
deviceUuid,
|
|
updateDeviceDto,
|
|
projectUuid,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_VIEW')
|
|
@Get(':deviceUuid/functions')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.GET_DEVICE_INSTRUCTION_SUMMARY,
|
|
description:
|
|
ControllerRoute.DEVICE.ACTIONS.GET_DEVICE_INSTRUCTION_DESCRIPTION,
|
|
})
|
|
async getDeviceInstructionByDeviceId(
|
|
@Param('deviceUuid') deviceUuid: string,
|
|
@Req() req: any,
|
|
) {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.getDeviceInstructionByDeviceId(
|
|
deviceUuid,
|
|
projectUuid,
|
|
);
|
|
}
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_VIEW')
|
|
@Get(':deviceUuid/functions/status')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.GET_DEVICE_STATUS_SUMMARY,
|
|
description: ControllerRoute.DEVICE.ACTIONS.GET_DEVICE_STATUS_DESCRIPTION,
|
|
})
|
|
async getDevicesInstructionStatus(
|
|
@Param('deviceUuid') deviceUuid: string,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.getDevicesStatus(deviceUuid, projectUuid);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_SINGLE_CONTROL')
|
|
@Post(':deviceUuid/command')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.CONTROL_DEVICE_SUMMARY,
|
|
description: ControllerRoute.DEVICE.ACTIONS.CONTROL_DEVICE_DESCRIPTION,
|
|
})
|
|
async controlDevice(
|
|
@Body() controlDeviceDto: ControlDeviceDto,
|
|
@Param('deviceUuid') deviceUuid: string,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.controlDevice(
|
|
controlDeviceDto,
|
|
deviceUuid,
|
|
projectUuid,
|
|
);
|
|
}
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('FIRMWARE_CONTROL')
|
|
@Post(':deviceUuid/firmware/:firmwareVersion')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.UPDATE_DEVICE_FIRMWARE_SUMMARY,
|
|
description:
|
|
ControllerRoute.DEVICE.ACTIONS.UPDATE_DEVICE_FIRMWARE_DESCRIPTION,
|
|
})
|
|
async updateDeviceFirmware(
|
|
@Param('deviceUuid') deviceUuid: string,
|
|
@Param('firmwareVersion') firmwareVersion: number,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.updateDeviceFirmware(
|
|
deviceUuid,
|
|
firmwareVersion,
|
|
projectUuid,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_VIEW')
|
|
@Get(':deviceUuid/report-logs')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.GET_DEVICE_LOGS_SUMMARY,
|
|
description: ControllerRoute.DEVICE.ACTIONS.GET_DEVICE_LOGS_DESCRIPTION,
|
|
})
|
|
async getBuildingChildByUuid(
|
|
@Param('deviceUuid') deviceUuid: string,
|
|
@Query() query: GetDeviceLogsDto,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.getDeviceLogs(
|
|
deviceUuid,
|
|
query,
|
|
projectUuid,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard, CheckFourAndSixSceneDeviceTypeGuard)
|
|
@Permissions('DEVICE_SINGLE_CONTROL')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.ADD_SCENE_TO_DEVICE_SUMMARY,
|
|
description: ControllerRoute.DEVICE.ACTIONS.ADD_SCENE_TO_DEVICE_DESCRIPTION,
|
|
})
|
|
@Post(':deviceUuid/scenes')
|
|
async addSceneToSceneDevice(
|
|
@Param('deviceUuid') deviceUuid: string,
|
|
@Body() addSceneToFourSceneDeviceDto: AddSceneToFourSceneDeviceDto,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.addSceneToSceneDevice(
|
|
deviceUuid,
|
|
addSceneToFourSceneDeviceDto,
|
|
projectUuid,
|
|
);
|
|
}
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard, CheckFourAndSixSceneDeviceTypeGuard)
|
|
@Permissions('DEVICE_VIEW')
|
|
@Get(':deviceUuid/scenes')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.GET_SCENES_BY_DEVICE_SUMMARY,
|
|
description:
|
|
ControllerRoute.DEVICE.ACTIONS.GET_SCENES_BY_DEVICE_DESCRIPTION,
|
|
})
|
|
async getScenesBySceneDevice(
|
|
@Param('deviceUuid') deviceUuid: string,
|
|
@Query() getSceneFourSceneDeviceDto: GetSceneFourSceneDeviceDto,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.getScenesBySceneDevice(
|
|
deviceUuid,
|
|
getSceneFourSceneDeviceDto,
|
|
projectUuid,
|
|
);
|
|
}
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_DELETE')
|
|
@Delete(':deviceUuid/scenes')
|
|
@ApiOperation({
|
|
summary:
|
|
ControllerRoute.DEVICE.ACTIONS.DELETE_SCENES_BY_SWITCH_NAME_SUMMARY,
|
|
description:
|
|
ControllerRoute.DEVICE.ACTIONS.DELETE_SCENES_BY_SWITCH_NAME_DESCRIPTION,
|
|
})
|
|
async deleteSceneFromSceneDevice(
|
|
@Param() param: DeviceSceneParamDto,
|
|
@Query() query: DeleteSceneFromSceneDeviceDto,
|
|
@Req() req: any,
|
|
): Promise<BaseResponseDto> {
|
|
const projectUuid = req.user.project.uuid;
|
|
return await this.deviceService.deleteSceneFromSceneDevice(
|
|
param,
|
|
query,
|
|
projectUuid,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(PermissionsGuard)
|
|
@Permissions('DEVICE_UPDATE')
|
|
@Post('/populate-tuya-const-uuids')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.DEVICE.ACTIONS.POPULATE_TUYA_CONST_UUID_SUMMARY,
|
|
description:
|
|
ControllerRoute.DEVICE.ACTIONS.POPULATE_TUYA_CONST_UUID_DESCRIPTION,
|
|
})
|
|
async populateTuyaConstUuid(@Req() req: any): Promise<void> {
|
|
const userUuid = req['user']?.userUuid;
|
|
const userRole = req['user']?.role;
|
|
if (!userUuid || (userRole && userRole !== RoleType.SUPER_ADMIN)) {
|
|
throw new UnauthorizedException('Unauthorized to perform this action');
|
|
}
|
|
return this.deviceService.addTuyaConstUuidToDevices();
|
|
}
|
|
}
|