feat: add device name field to DeviceEntity and update related DTOs and services

This commit is contained in:
faris Aljohari
2025-04-22 01:53:03 +03:00
parent 1e6503c072
commit 2f12189eef
7 changed files with 69 additions and 126 deletions
+22
View File
@@ -6,6 +6,18 @@ import { ConfigModule } from '@nestjs/config';
import { DeviceRepositoryModule } from '@app/common/modules/device';
import { SpaceRepository } from '@app/common/modules/space/repositories';
import { ProductRepository } from '@app/common/modules/product/repositories';
import { DeviceService } from 'src/device/services';
import { SceneDeviceRepository } from '@app/common/modules/scene-device/repositories';
import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
import { SceneService } from 'src/scene/services';
import { TuyaService } from '@app/common/integrations/tuya/services/tuya.service';
import { ProjectRepository } from '@app/common/modules/project/repositiories';
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories';
import {
SceneIconRepository,
SceneRepository,
} from '@app/common/modules/scene/repositories';
import { AutomationRepository } from '@app/common/modules/automation/repositories';
@Module({
imports: [ConfigModule, DeviceRepositoryModule],
controllers: [GroupController],
@@ -15,6 +27,16 @@ import { ProductRepository } from '@app/common/modules/product/repositories';
SpaceRepository,
DeviceRepository,
ProductRepository,
DeviceService,
SceneDeviceRepository,
DeviceStatusFirebaseService,
SceneService,
TuyaService,
ProjectRepository,
DeviceStatusLogRepository,
SceneIconRepository,
SceneRepository,
AutomationRepository,
],
exports: [GroupService],
})
+6 -40
View File
@@ -2,19 +2,17 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { TuyaContext } from '@tuya/tuya-connector-nodejs';
import { ConfigService } from '@nestjs/config';
import { SpaceRepository } from '@app/common/modules/space/repositories';
import { GetDeviceDetailsInterface } from 'src/device/interfaces/get.device.interface';
import { convertKeysToCamelCase } from '@app/common/helper/camelCaseConverter';
import { ProductRepository } from '@app/common/modules/product/repositories';
import { PermissionType } from '@app/common/constants/permission-type.enum';
import { In } from 'typeorm';
import { ProductType } from '@app/common/constants/product-type.enum';
import { DeviceService } from 'src/device/services';
@Injectable()
export class GroupService {
private tuya: TuyaContext;
constructor(
private readonly configService: ConfigService,
private readonly productRepository: ProductRepository,
private readonly deviceService: DeviceService,
private readonly spaceRepository: SpaceRepository,
) {
const accessKey = this.configService.get<string>('auth-config.ACCESS_KEY');
@@ -101,9 +99,10 @@ export class GroupService {
spaces.flatMap(async (space) => {
return await Promise.all(
space.devices.map(async (device) => {
const deviceDetails = await this.getDeviceDetailsByDeviceIdTuya(
device.deviceTuyaUuid,
);
const deviceDetails =
await this.deviceService.getDeviceDetailsByDeviceIdTuya(
device.deviceTuyaUuid,
);
return {
haveRoom: !!device.spaceDevice,
productUuid: device.productDevice.uuid,
@@ -126,37 +125,4 @@ export class GroupService {
);
}
}
async getDeviceDetailsByDeviceIdTuya(
deviceId: string,
): Promise<GetDeviceDetailsInterface> {
try {
const path = `/v1.1/iot-03/devices/${deviceId}`;
const response = await this.tuya.request({
method: 'GET',
path,
});
// Convert keys to camel case
const camelCaseResponse = convertKeysToCamelCase(response);
const product = await this.productRepository.findOne({
where: {
prodId: camelCaseResponse.result.productId,
},
});
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { productName, productId, ...rest } = camelCaseResponse.result;
return {
...rest,
productUuid: product.uuid,
} as GetDeviceDetailsInterface;
} catch (error) {
throw new HttpException(
'Error fetching device details from Tuya',
HttpStatus.INTERNAL_SERVER_ERROR,
);
}
}
}