Refactor Visitor Password Controller and Service for Enhanced Security and Functionality

This commit is contained in:
faris Aljohari
2024-08-13 01:41:23 +03:00
parent 3aff8d59d2
commit 764cfbe7e2
3 changed files with 39 additions and 20 deletions

View File

@ -49,8 +49,8 @@ export class VisitorPasswordController {
);
}
}
// @ApiBearerAuth()
// @UseGuards(JwtAuthGuard)
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@Post('temporary-password/online/one-time')
async addOnlineTemporaryPassword(
@Body() addDoorLockOnlineOneTimeDto: AddDoorLockOnlineOneTimeDto,
@ -86,8 +86,6 @@ export class VisitorPasswordController {
return {
statusCode: HttpStatus.CREATED,
success: true,
message: 'offline temporary password added successfully',
data: temporaryPassword,
};
} catch (error) {
@ -112,8 +110,6 @@ export class VisitorPasswordController {
return {
statusCode: HttpStatus.CREATED,
success: true,
message: 'offline temporary password added successfully',
data: temporaryPassword,
};
} catch (error) {
@ -123,7 +119,9 @@ export class VisitorPasswordController {
);
}
}
@Get('')
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@Get()
async GetVisitorPassword() {
try {
return await this.visitorPasswordService.getPasswords();
@ -134,6 +132,8 @@ export class VisitorPasswordController {
);
}
}
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@Get('/devices')
async GetVisitorDevices() {
try {

View File

@ -17,6 +17,8 @@ import {
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 { GetDeviceDetailsInterface } from 'src/device/interfaces/get.device.interface';
import { DeviceService } from 'src/device/services';
@Injectable()
export class VisitorPasswordService {
@ -26,6 +28,7 @@ export class VisitorPasswordService {
private readonly deviceRepository: DeviceRepository,
private readonly emailService: EmailService,
private readonly doorLockService: DoorLockService,
private readonly deviceService: DeviceService,
private readonly passwordEncryptionService: PasswordEncryptionService,
) {
const accessKey = this.configService.get<string>('auth-config.ACCESS_KEY');
@ -383,7 +386,7 @@ export class VisitorPasswordService {
);
// Return results if there are successful operations
if (successfulResults.length > 0) {
if (successfulResults?.length > 0) {
return {
successOperations: successfulResults,
failedOperations: failedResults,
@ -416,9 +419,6 @@ export class VisitorPasswordService {
const data = [];
deviceIds.forEach((deviceId) => {
data.push(
this.doorLockService
.getOfflineMultipleTimeTemporaryPasswords(deviceId.uuid, true)
.catch(() => {}),
this.doorLockService
.getOnlineTemporaryPasswordsOneTime(deviceId.uuid, true)
.catch(() => {}),
@ -428,6 +428,9 @@ export class VisitorPasswordService {
this.doorLockService
.getOfflineOneTimeTemporaryPasswords(deviceId.uuid, true)
.catch(() => {}),
this.doorLockService
.getOfflineMultipleTimeTemporaryPasswords(deviceId.uuid, true)
.catch(() => {}),
);
});
return (await Promise.all(data)).flat().filter((datum) => {
@ -436,13 +439,27 @@ export class VisitorPasswordService {
}
async getAllPassDevices() {
return await this.deviceRepository.find({
const devices = await this.deviceRepository.find({
where: {
productDevice: {
prodType: ProductType.DL,
},
},
relations: ['productDevice'],
});
const devicesData = await Promise.all(
devices?.map(async (device) => {
return {
productUuid: device.productDevice.uuid,
productType: device.productDevice.prodType,
...(await this.deviceService.getDeviceDetailsByDeviceIdTuya(
device.deviceTuyaUuid,
)),
uuid: device.uuid,
} as GetDeviceDetailsInterface;
}),
);
return devicesData;
}
async addOnlineTemporaryPasswordOneTime(
@ -622,7 +639,7 @@ export class VisitorPasswordService {
try {
const path = `/v1.0/devices/${doorLockUuid}/door-lock/temp-password`;
let scheduleList;
if (addDeviceObj.scheduleList.length > 0) {
if (addDeviceObj?.scheduleList?.length > 0) {
scheduleList = addDeviceObj.scheduleList.map((schedule) => ({
effective_time: this.timeToMinutes(schedule.effectiveTime),
invalid_time: this.timeToMinutes(schedule.invalidTime),
@ -640,19 +657,16 @@ export class VisitorPasswordService {
invalid_time: addDeviceObj.invalidTime,
password_type: 'ticket',
ticket_id: addDeviceObj.ticketId,
...(addDeviceObj.scheduleList.length > 0 && {
...(addDeviceObj?.scheduleList?.length > 0 && {
schedule_list: scheduleList,
}),
type: '0',
},
});
console.log('response', response);
return response as createTickInterface;
} catch (error) {
console.log('error', error);
throw new HttpException(
error.msg || 'Error adding online temporary password from Tuya',
HttpStatus.INTERNAL_SERVER_ERROR,
@ -789,12 +803,9 @@ export class VisitorPasswordService {
type: '1',
},
});
console.log('response', response);
return response as createTickInterface;
} catch (error) {
console.log('error', error);
throw new HttpException(
error.msg || 'Error adding online temporary password from Tuya',
HttpStatus.INTERNAL_SERVER_ERROR,

View File

@ -7,6 +7,10 @@ import { DeviceRepository } from '@app/common/modules/device/repositories';
import { EmailService } from '@app/common/util/email.service';
import { PasswordEncryptionService } from 'src/door-lock/services/encryption.services';
import { DoorLockModule } from 'src/door-lock/door.lock.module';
import { DeviceService } from 'src/device/services';
import { ProductRepository } from '@app/common/modules/product/repositories';
import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
import { SpaceRepository } from '@app/common/modules/space/repositories';
@Module({
imports: [ConfigModule, DeviceRepositoryModule, DoorLockModule],
controllers: [VisitorPasswordController],
@ -14,6 +18,10 @@ import { DoorLockModule } from 'src/door-lock/door.lock.module';
VisitorPasswordService,
EmailService,
PasswordEncryptionService,
DeviceService,
ProductRepository,
DeviceStatusFirebaseService,
SpaceRepository,
DeviceRepository,
],
exports: [VisitorPasswordService],