From 764cfbe7e2e492ea9710577790f12685b45ee4c8 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Tue, 13 Aug 2024 01:41:23 +0300 Subject: [PATCH] Refactor Visitor Password Controller and Service for Enhanced Security and Functionality --- .../visitor-password.controller.ts | 14 +++---- .../services/visitor-password.service.ts | 37 ++++++++++++------- .../visitor-password.module.ts | 8 ++++ 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/vistor-password/controllers/visitor-password.controller.ts b/src/vistor-password/controllers/visitor-password.controller.ts index c3fdfc8..f1a84bb 100644 --- a/src/vistor-password/controllers/visitor-password.controller.ts +++ b/src/vistor-password/controllers/visitor-password.controller.ts @@ -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 { diff --git a/src/vistor-password/services/visitor-password.service.ts b/src/vistor-password/services/visitor-password.service.ts index 98b3a1e..e8b2df4 100644 --- a/src/vistor-password/services/visitor-password.service.ts +++ b/src/vistor-password/services/visitor-password.service.ts @@ -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('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, diff --git a/src/vistor-password/visitor-password.module.ts b/src/vistor-password/visitor-password.module.ts index 51239f4..33454a3 100644 --- a/src/vistor-password/visitor-password.module.ts +++ b/src/vistor-password/visitor-password.module.ts @@ -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],