mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-13 01:22:15 +00:00
Compare commits
1 Commits
refactor/a
...
fix/add-de
Author | SHA1 | Date | |
---|---|---|---|
db8caf9c58 |
@ -3,6 +3,7 @@ import * as fs from 'fs';
|
|||||||
|
|
||||||
import { ProjectParam } from '@app/common/dto/project-param.dto';
|
import { ProjectParam } from '@app/common/dto/project-param.dto';
|
||||||
import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
|
import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
|
||||||
|
import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
|
||||||
import { TuyaService } from '@app/common/integrations/tuya/services/tuya.service';
|
import { TuyaService } from '@app/common/integrations/tuya/services/tuya.service';
|
||||||
import { CommunityRepository } from '@app/common/modules/community/repositories';
|
import { CommunityRepository } from '@app/common/modules/community/repositories';
|
||||||
import { DeviceRepository } from '@app/common/modules/device/repositories';
|
import { DeviceRepository } from '@app/common/modules/device/repositories';
|
||||||
@ -20,6 +21,7 @@ export class DeviceCommissionService {
|
|||||||
constructor(
|
constructor(
|
||||||
private readonly tuyaService: TuyaService,
|
private readonly tuyaService: TuyaService,
|
||||||
private readonly deviceService: DeviceService,
|
private readonly deviceService: DeviceService,
|
||||||
|
private readonly deviceStatusFirebaseService: DeviceStatusFirebaseService,
|
||||||
private readonly communityRepository: CommunityRepository,
|
private readonly communityRepository: CommunityRepository,
|
||||||
private readonly spaceRepository: SpaceRepository,
|
private readonly spaceRepository: SpaceRepository,
|
||||||
private readonly subspaceRepository: SubspaceRepository,
|
private readonly subspaceRepository: SubspaceRepository,
|
||||||
@ -209,6 +211,10 @@ export class DeviceCommissionService {
|
|||||||
rawDeviceId,
|
rawDeviceId,
|
||||||
tuyaSpaceId,
|
tuyaSpaceId,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
await this.deviceStatusFirebaseService.addDeviceStatusByDeviceUuid(
|
||||||
|
rawDeviceId,
|
||||||
|
);
|
||||||
successCount.value++;
|
successCount.value++;
|
||||||
console.log(
|
console.log(
|
||||||
`Device ${rawDeviceId} successfully processed and transferred to Tuya space ${tuyaSpaceId}`,
|
`Device ${rawDeviceId} successfully processed and transferred to Tuya space ${tuyaSpaceId}`,
|
||||||
|
@ -1,39 +1,39 @@
|
|||||||
import { ProductType } from '@app/common/constants/product-type.enum';
|
import { VisitorPasswordRepository } from './../../../libs/common/src/modules/visitor-password/repositories/visitor-password.repository';
|
||||||
import { DeviceRepository } from '@app/common/modules/device/repositories';
|
|
||||||
import {
|
import {
|
||||||
BadRequestException,
|
Injectable,
|
||||||
HttpException,
|
HttpException,
|
||||||
HttpStatus,
|
HttpStatus,
|
||||||
Injectable,
|
BadRequestException,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { ConfigService } from '@nestjs/config';
|
|
||||||
import { TuyaContext } from '@tuya/tuya-connector-nodejs';
|
import { TuyaContext } from '@tuya/tuya-connector-nodejs';
|
||||||
|
import { ConfigService } from '@nestjs/config';
|
||||||
import {
|
import {
|
||||||
addDeviceObjectInterface,
|
addDeviceObjectInterface,
|
||||||
createTickInterface,
|
createTickInterface,
|
||||||
} from '../interfaces/visitor-password.interface';
|
} from '../interfaces/visitor-password.interface';
|
||||||
import { VisitorPasswordRepository } from './../../../libs/common/src/modules/visitor-password/repositories/visitor-password.repository';
|
import { DeviceRepository } from '@app/common/modules/device/repositories';
|
||||||
|
import { ProductType } from '@app/common/constants/product-type.enum';
|
||||||
|
|
||||||
|
import { AddDoorLockTemporaryPasswordDto } from '../dtos';
|
||||||
|
import { EmailService } from '@app/common/util/email.service';
|
||||||
|
import { PasswordEncryptionService } from 'src/door-lock/services/encryption.services';
|
||||||
|
import { DoorLockService } from 'src/door-lock/services';
|
||||||
|
import { DeviceService } from 'src/device/services';
|
||||||
|
import { DeviceStatuses } from '@app/common/constants/device-status.enum';
|
||||||
import {
|
import {
|
||||||
DaysEnum,
|
DaysEnum,
|
||||||
EnableDisableStatusEnum,
|
EnableDisableStatusEnum,
|
||||||
} from '@app/common/constants/days.enum';
|
} from '@app/common/constants/days.enum';
|
||||||
import { DeviceStatuses } from '@app/common/constants/device-status.enum';
|
import { PasswordType } from '@app/common/constants/password-type.enum';
|
||||||
import {
|
import {
|
||||||
CommonHourMinutes,
|
CommonHourMinutes,
|
||||||
CommonHours,
|
CommonHours,
|
||||||
} from '@app/common/constants/hours-minutes.enum';
|
} from '@app/common/constants/hours-minutes.enum';
|
||||||
import { ORPHAN_SPACE_NAME } from '@app/common/constants/orphan-constant';
|
import { ProjectRepository } from '@app/common/modules/project/repositiories';
|
||||||
import { PasswordType } from '@app/common/constants/password-type.enum';
|
|
||||||
import { VisitorPasswordEnum } from '@app/common/constants/visitor-password.enum';
|
import { VisitorPasswordEnum } from '@app/common/constants/visitor-password.enum';
|
||||||
import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
|
import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
|
||||||
import { ProjectRepository } from '@app/common/modules/project/repositiories';
|
|
||||||
import { EmailService } from '@app/common/util/email.service';
|
|
||||||
import { DeviceService } from 'src/device/services';
|
|
||||||
import { DoorLockService } from 'src/door-lock/services';
|
|
||||||
import { PasswordEncryptionService } from 'src/door-lock/services/encryption.services';
|
|
||||||
import { Not } from 'typeorm';
|
import { Not } from 'typeorm';
|
||||||
import { AddDoorLockTemporaryPasswordDto } from '../dtos';
|
import { ORPHAN_SPACE_NAME } from '@app/common/constants/orphan-constant';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class VisitorPasswordService {
|
export class VisitorPasswordService {
|
||||||
@ -57,67 +57,6 @@ export class VisitorPasswordService {
|
|||||||
secretKey,
|
secretKey,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async getPasswords(projectUuid: string) {
|
|
||||||
await this.validateProject(projectUuid);
|
|
||||||
|
|
||||||
const deviceIds = await this.deviceRepository.find({
|
|
||||||
where: {
|
|
||||||
productDevice: {
|
|
||||||
prodType: ProductType.DL,
|
|
||||||
},
|
|
||||||
spaceDevice: {
|
|
||||||
spaceName: Not(ORPHAN_SPACE_NAME),
|
|
||||||
community: {
|
|
||||||
project: {
|
|
||||||
uuid: projectUuid,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
isActive: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const data = [];
|
|
||||||
deviceIds.forEach((deviceId) => {
|
|
||||||
data.push(
|
|
||||||
this.doorLockService
|
|
||||||
.getOnlineTemporaryPasswordsOneTime(deviceId.uuid, true, false)
|
|
||||||
.catch(() => {}),
|
|
||||||
this.doorLockService
|
|
||||||
.getOnlineTemporaryPasswordsOneTime(deviceId.uuid, true, true)
|
|
||||||
.catch(() => {}),
|
|
||||||
this.doorLockService
|
|
||||||
.getOnlineTemporaryPasswordsMultiple(deviceId.uuid, true, false)
|
|
||||||
.catch(() => {}),
|
|
||||||
this.doorLockService
|
|
||||||
.getOnlineTemporaryPasswordsMultiple(deviceId.uuid, true, true)
|
|
||||||
.catch(() => {}),
|
|
||||||
this.doorLockService
|
|
||||||
.getOfflineOneTimeTemporaryPasswords(deviceId.uuid, true, false)
|
|
||||||
.catch(() => {}),
|
|
||||||
this.doorLockService
|
|
||||||
.getOfflineOneTimeTemporaryPasswords(deviceId.uuid, true, true)
|
|
||||||
.catch(() => {}),
|
|
||||||
this.doorLockService
|
|
||||||
.getOfflineMultipleTimeTemporaryPasswords(deviceId.uuid, true, false)
|
|
||||||
.catch(() => {}),
|
|
||||||
this.doorLockService
|
|
||||||
.getOfflineMultipleTimeTemporaryPasswords(deviceId.uuid, true, true)
|
|
||||||
.catch(() => {}),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
const result = (await Promise.all(data)).flat().filter((datum) => {
|
|
||||||
return datum != null;
|
|
||||||
});
|
|
||||||
|
|
||||||
return new SuccessResponseDto({
|
|
||||||
message: 'Successfully retrieved temporary passwords',
|
|
||||||
data: result,
|
|
||||||
statusCode: HttpStatus.OK,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async handleTemporaryPassword(
|
async handleTemporaryPassword(
|
||||||
addDoorLockTemporaryPasswordDto: AddDoorLockTemporaryPasswordDto,
|
addDoorLockTemporaryPasswordDto: AddDoorLockTemporaryPasswordDto,
|
||||||
userUuid: string,
|
userUuid: string,
|
||||||
@ -166,7 +105,7 @@ export class VisitorPasswordService {
|
|||||||
statusCode: HttpStatus.CREATED,
|
statusCode: HttpStatus.CREATED,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
private async addOfflineMultipleTimeTemporaryPassword(
|
async addOfflineMultipleTimeTemporaryPassword(
|
||||||
addDoorLockOfflineMultipleDto: AddDoorLockTemporaryPasswordDto,
|
addDoorLockOfflineMultipleDto: AddDoorLockTemporaryPasswordDto,
|
||||||
userUuid: string,
|
userUuid: string,
|
||||||
projectUuid: string,
|
projectUuid: string,
|
||||||
@ -230,7 +169,6 @@ export class VisitorPasswordService {
|
|||||||
success: true,
|
success: true,
|
||||||
result: createMultipleOfflinePass.result,
|
result: createMultipleOfflinePass.result,
|
||||||
deviceUuid,
|
deviceUuid,
|
||||||
deviceName: deviceDetails.name,
|
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return {
|
return {
|
||||||
@ -293,7 +231,7 @@ export class VisitorPasswordService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async addOfflineOneTimeTemporaryPassword(
|
async addOfflineOneTimeTemporaryPassword(
|
||||||
addDoorLockOfflineOneTimeDto: AddDoorLockTemporaryPasswordDto,
|
addDoorLockOfflineOneTimeDto: AddDoorLockTemporaryPasswordDto,
|
||||||
userUuid: string,
|
userUuid: string,
|
||||||
projectUuid: string,
|
projectUuid: string,
|
||||||
@ -357,7 +295,6 @@ export class VisitorPasswordService {
|
|||||||
success: true,
|
success: true,
|
||||||
result: createOnceOfflinePass.result,
|
result: createOnceOfflinePass.result,
|
||||||
deviceUuid,
|
deviceUuid,
|
||||||
deviceName: deviceDetails.name,
|
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return {
|
return {
|
||||||
@ -420,7 +357,7 @@ export class VisitorPasswordService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async addOfflineTemporaryPasswordTuya(
|
async addOfflineTemporaryPasswordTuya(
|
||||||
doorLockUuid: string,
|
doorLockUuid: string,
|
||||||
type: string,
|
type: string,
|
||||||
addDoorLockOfflineMultipleDto: AddDoorLockTemporaryPasswordDto,
|
addDoorLockOfflineMultipleDto: AddDoorLockTemporaryPasswordDto,
|
||||||
@ -450,7 +387,7 @@ export class VisitorPasswordService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private async addOnlineTemporaryPasswordMultipleTime(
|
async addOnlineTemporaryPasswordMultipleTime(
|
||||||
addDoorLockOnlineMultipleDto: AddDoorLockTemporaryPasswordDto,
|
addDoorLockOnlineMultipleDto: AddDoorLockTemporaryPasswordDto,
|
||||||
userUuid: string,
|
userUuid: string,
|
||||||
projectUuid: string,
|
projectUuid: string,
|
||||||
@ -511,7 +448,6 @@ export class VisitorPasswordService {
|
|||||||
success: true,
|
success: true,
|
||||||
id: createPass.result.id,
|
id: createPass.result.id,
|
||||||
deviceUuid,
|
deviceUuid,
|
||||||
deviceName: passwordData.deviceName,
|
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return {
|
return {
|
||||||
@ -572,8 +508,67 @@ export class VisitorPasswordService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async getPasswords(projectUuid: string) {
|
||||||
|
await this.validateProject(projectUuid);
|
||||||
|
|
||||||
private async addOnlineTemporaryPasswordOneTime(
|
const deviceIds = await this.deviceRepository.find({
|
||||||
|
where: {
|
||||||
|
productDevice: {
|
||||||
|
prodType: ProductType.DL,
|
||||||
|
},
|
||||||
|
spaceDevice: {
|
||||||
|
spaceName: Not(ORPHAN_SPACE_NAME),
|
||||||
|
community: {
|
||||||
|
project: {
|
||||||
|
uuid: projectUuid,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
isActive: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const data = [];
|
||||||
|
deviceIds.forEach((deviceId) => {
|
||||||
|
data.push(
|
||||||
|
this.doorLockService
|
||||||
|
.getOnlineTemporaryPasswordsOneTime(deviceId.uuid, true, false)
|
||||||
|
.catch(() => {}),
|
||||||
|
this.doorLockService
|
||||||
|
.getOnlineTemporaryPasswordsOneTime(deviceId.uuid, true, true)
|
||||||
|
.catch(() => {}),
|
||||||
|
this.doorLockService
|
||||||
|
.getOnlineTemporaryPasswordsMultiple(deviceId.uuid, true, false)
|
||||||
|
.catch(() => {}),
|
||||||
|
this.doorLockService
|
||||||
|
.getOnlineTemporaryPasswordsMultiple(deviceId.uuid, true, true)
|
||||||
|
.catch(() => {}),
|
||||||
|
this.doorLockService
|
||||||
|
.getOfflineOneTimeTemporaryPasswords(deviceId.uuid, true, false)
|
||||||
|
.catch(() => {}),
|
||||||
|
this.doorLockService
|
||||||
|
.getOfflineOneTimeTemporaryPasswords(deviceId.uuid, true, true)
|
||||||
|
.catch(() => {}),
|
||||||
|
this.doorLockService
|
||||||
|
.getOfflineMultipleTimeTemporaryPasswords(deviceId.uuid, true, false)
|
||||||
|
.catch(() => {}),
|
||||||
|
this.doorLockService
|
||||||
|
.getOfflineMultipleTimeTemporaryPasswords(deviceId.uuid, true, true)
|
||||||
|
.catch(() => {}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
const result = (await Promise.all(data)).flat().filter((datum) => {
|
||||||
|
return datum != null;
|
||||||
|
});
|
||||||
|
|
||||||
|
return new SuccessResponseDto({
|
||||||
|
message: 'Successfully retrieved temporary passwords',
|
||||||
|
data: result,
|
||||||
|
statusCode: HttpStatus.OK,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async addOnlineTemporaryPasswordOneTime(
|
||||||
addDoorLockOnlineOneTimeDto: AddDoorLockTemporaryPasswordDto,
|
addDoorLockOnlineOneTimeDto: AddDoorLockTemporaryPasswordDto,
|
||||||
userUuid: string,
|
userUuid: string,
|
||||||
projectUuid: string,
|
projectUuid: string,
|
||||||
@ -632,7 +627,6 @@ export class VisitorPasswordService {
|
|||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
id: createPass.result.id,
|
id: createPass.result.id,
|
||||||
deviceName: passwordData.deviceName,
|
|
||||||
deviceUuid,
|
deviceUuid,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -694,7 +688,7 @@ export class VisitorPasswordService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private async getTicketAndEncryptedPassword(
|
async getTicketAndEncryptedPassword(
|
||||||
doorLockUuid: string,
|
doorLockUuid: string,
|
||||||
passwordPlan: string,
|
passwordPlan: string,
|
||||||
projectUuid: string,
|
projectUuid: string,
|
||||||
@ -731,7 +725,6 @@ export class VisitorPasswordService {
|
|||||||
ticketKey: ticketDetails.result.ticket_key,
|
ticketKey: ticketDetails.result.ticket_key,
|
||||||
encryptedPassword: decrypted,
|
encryptedPassword: decrypted,
|
||||||
deviceTuyaUuid: deviceDetails.deviceTuyaUuid,
|
deviceTuyaUuid: deviceDetails.deviceTuyaUuid,
|
||||||
deviceName: deviceDetails.name,
|
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw new HttpException(
|
throw new HttpException(
|
||||||
@ -741,7 +734,7 @@ export class VisitorPasswordService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async createDoorLockTicketTuya(
|
async createDoorLockTicketTuya(
|
||||||
deviceUuid: string,
|
deviceUuid: string,
|
||||||
): Promise<createTickInterface> {
|
): Promise<createTickInterface> {
|
||||||
try {
|
try {
|
||||||
@ -760,7 +753,7 @@ export class VisitorPasswordService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async addOnlineTemporaryPasswordMultipleTuya(
|
async addOnlineTemporaryPasswordMultipleTuya(
|
||||||
addDeviceObj: addDeviceObjectInterface,
|
addDeviceObj: addDeviceObjectInterface,
|
||||||
doorLockUuid: string,
|
doorLockUuid: string,
|
||||||
): Promise<createTickInterface> {
|
): Promise<createTickInterface> {
|
||||||
@ -802,7 +795,7 @@ export class VisitorPasswordService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private getWorkingDayValue(days) {
|
getWorkingDayValue(days) {
|
||||||
// Array representing the days of the week
|
// Array representing the days of the week
|
||||||
const weekDays = [
|
const weekDays = [
|
||||||
DaysEnum.SAT,
|
DaysEnum.SAT,
|
||||||
@ -834,7 +827,36 @@ export class VisitorPasswordService {
|
|||||||
|
|
||||||
return workingDayValue;
|
return workingDayValue;
|
||||||
}
|
}
|
||||||
private timeToMinutes(timeStr) {
|
getDaysFromWorkingDayValue(workingDayValue) {
|
||||||
|
// Array representing the days of the week
|
||||||
|
const weekDays = [
|
||||||
|
DaysEnum.SAT,
|
||||||
|
DaysEnum.FRI,
|
||||||
|
DaysEnum.THU,
|
||||||
|
DaysEnum.WED,
|
||||||
|
DaysEnum.TUE,
|
||||||
|
DaysEnum.MON,
|
||||||
|
DaysEnum.SUN,
|
||||||
|
];
|
||||||
|
|
||||||
|
// Convert the integer to a binary string and pad with leading zeros to ensure 7 bits
|
||||||
|
const binaryString = workingDayValue
|
||||||
|
.toString(2)
|
||||||
|
.padStart(7, EnableDisableStatusEnum.DISABLED);
|
||||||
|
|
||||||
|
// Initialize an array to hold the days of the week
|
||||||
|
const days = [];
|
||||||
|
|
||||||
|
// Iterate through the binary string and weekDays array
|
||||||
|
for (let i = 0; i < binaryString.length; i++) {
|
||||||
|
if (binaryString[i] === EnableDisableStatusEnum.ENABLED) {
|
||||||
|
days.push(weekDays[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return days;
|
||||||
|
}
|
||||||
|
timeToMinutes(timeStr) {
|
||||||
try {
|
try {
|
||||||
// Special case for "24:00"
|
// Special case for "24:00"
|
||||||
if (timeStr === CommonHours.TWENTY_FOUR) {
|
if (timeStr === CommonHours.TWENTY_FOUR) {
|
||||||
@ -861,7 +883,38 @@ export class VisitorPasswordService {
|
|||||||
throw new HttpException(error.message, HttpStatus.INTERNAL_SERVER_ERROR);
|
throw new HttpException(error.message, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private async getDeviceByDeviceUuid(
|
minutesToTime(totalMinutes) {
|
||||||
|
try {
|
||||||
|
if (
|
||||||
|
typeof totalMinutes !== 'number' ||
|
||||||
|
totalMinutes < 0 ||
|
||||||
|
totalMinutes > CommonHourMinutes.TWENTY_FOUR
|
||||||
|
) {
|
||||||
|
throw new Error('Invalid minutes value');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalMinutes === CommonHourMinutes.TWENTY_FOUR) {
|
||||||
|
return CommonHours.TWENTY_FOUR;
|
||||||
|
}
|
||||||
|
|
||||||
|
const hours = Math.floor(totalMinutes / 60);
|
||||||
|
const minutes = totalMinutes % 60;
|
||||||
|
|
||||||
|
const formattedHours = String(hours).padStart(
|
||||||
|
2,
|
||||||
|
EnableDisableStatusEnum.DISABLED,
|
||||||
|
);
|
||||||
|
const formattedMinutes = String(minutes).padStart(
|
||||||
|
2,
|
||||||
|
EnableDisableStatusEnum.DISABLED,
|
||||||
|
);
|
||||||
|
|
||||||
|
return `${formattedHours}:${formattedMinutes}`;
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(error.message, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async getDeviceByDeviceUuid(
|
||||||
deviceUuid: string,
|
deviceUuid: string,
|
||||||
withProductDevice: boolean = true,
|
withProductDevice: boolean = true,
|
||||||
projectUuid: string,
|
projectUuid: string,
|
||||||
@ -886,7 +939,7 @@ export class VisitorPasswordService {
|
|||||||
throw new HttpException('Device Not Found', HttpStatus.NOT_FOUND);
|
throw new HttpException('Device Not Found', HttpStatus.NOT_FOUND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private async addOnlineTemporaryPasswordOneTimeTuya(
|
async addOnlineTemporaryPasswordOneTimeTuya(
|
||||||
addDeviceObj: addDeviceObjectInterface,
|
addDeviceObj: addDeviceObjectInterface,
|
||||||
doorLockUuid: string,
|
doorLockUuid: string,
|
||||||
): Promise<createTickInterface> {
|
): Promise<createTickInterface> {
|
||||||
|
Reference in New Issue
Block a user