mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-16 02:36:19 +00:00
refactor visitor passwords apis
This commit is contained in:
@ -231,8 +231,6 @@ export class SceneService {
|
||||
|
||||
const safeFetch = async (scene: any) => {
|
||||
try {
|
||||
console.log('scene', scene);
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const { actions, ...sceneDetails } = await this.getScene(
|
||||
scene,
|
||||
|
@ -1,2 +1 @@
|
||||
export * from './visitor-password.controller';
|
||||
export * from './project-visitor-password.controller';
|
@ -1,48 +0,0 @@
|
||||
import { VisitorPasswordService } from '../services/visitor-password.service';
|
||||
import { Controller, UseGuards, Get, Param } from '@nestjs/common';
|
||||
import { ApiTags, ApiBearerAuth, ApiOperation } from '@nestjs/swagger';
|
||||
import { Permissions } from 'src/decorators/permissions.decorator';
|
||||
|
||||
import { EnableDisableStatusEnum } from '@app/common/constants/days.enum';
|
||||
import { ControllerRoute } from '@app/common/constants/controller-route';
|
||||
import { ProjectParam } from 'src/community/dtos';
|
||||
import { PermissionsGuard } from 'src/guards/permissions.guard';
|
||||
|
||||
@ApiTags('Visitor Password Module')
|
||||
@Controller({
|
||||
version: EnableDisableStatusEnum.ENABLED,
|
||||
path: ControllerRoute.VISITOR_PASSWORD.PROJECT_ROUTE,
|
||||
})
|
||||
export class VisitorPasswordProjectController {
|
||||
constructor(
|
||||
private readonly visitorPasswordService: VisitorPasswordService,
|
||||
) {}
|
||||
|
||||
@ApiBearerAuth()
|
||||
@UseGuards(PermissionsGuard)
|
||||
@Permissions('VISITOR_PASSWORD_ADD')
|
||||
@Get()
|
||||
@ApiOperation({
|
||||
summary:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.GET_VISITOR_PASSWORD_SUMMARY,
|
||||
description:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.GET_VISITOR_PASSWORD_DESCRIPTION,
|
||||
})
|
||||
async GetVisitorPassword(@Param() param: ProjectParam) {
|
||||
return await this.visitorPasswordService.getPasswords(param);
|
||||
}
|
||||
|
||||
@ApiBearerAuth()
|
||||
@UseGuards(PermissionsGuard)
|
||||
@Permissions('VISITOR_PASSWORD_VIEW')
|
||||
@Get('/devices')
|
||||
@ApiOperation({
|
||||
summary:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.GET_VISITOR_DEVICES_SUMMARY,
|
||||
description:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.GET_VISITOR_DEVICES_DESCRIPTION,
|
||||
})
|
||||
async GetVisitorDevices(@Param() param: ProjectParam) {
|
||||
return await this.visitorPasswordService.getAllPassDevices(param);
|
||||
}
|
||||
}
|
@ -6,14 +6,10 @@ import {
|
||||
HttpStatus,
|
||||
UseGuards,
|
||||
Req,
|
||||
Get,
|
||||
} from '@nestjs/common';
|
||||
import { ApiTags, ApiBearerAuth, ApiOperation } from '@nestjs/swagger';
|
||||
import {
|
||||
AddDoorLockOfflineMultipleDto,
|
||||
AddDoorLockOfflineOneTimeDto,
|
||||
AddDoorLockOnlineMultipleDto,
|
||||
AddDoorLockOnlineOneTimeDto,
|
||||
} from '../dtos/temp-pass.dto';
|
||||
import { AddDoorLockTemporaryPasswordDto } from '../dtos/temp-pass.dto';
|
||||
import { EnableDisableStatusEnum } from '@app/common/constants/days.enum';
|
||||
import { ControllerRoute } from '@app/common/constants/controller-route';
|
||||
import { PermissionsGuard } from 'src/guards/permissions.guard';
|
||||
@ -32,23 +28,21 @@ export class VisitorPasswordController {
|
||||
@ApiBearerAuth()
|
||||
@UseGuards(PermissionsGuard)
|
||||
@Permissions('VISITOR_PASSWORD_ADD')
|
||||
@Post('temporary-password/online/multiple-time')
|
||||
@Post()
|
||||
@ApiOperation({
|
||||
summary:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS
|
||||
.ADD_ONLINE_TEMP_PASSWORD_MULTIPLE_TIME_SUMMARY,
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.ADD_VISITOR_PASSWORD_SUMMARY,
|
||||
description:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS
|
||||
.ADD_ONLINE_TEMP_PASSWORD_MULTIPLE_TIME_DESCRIPTION,
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.ADD_VISITOR_PASSWORD_DESCRIPTION,
|
||||
})
|
||||
async addOnlineTemporaryPasswordMultipleTime(
|
||||
@Body() addDoorLockOnlineMultipleDto: AddDoorLockOnlineMultipleDto,
|
||||
async addTemporaryPassword(
|
||||
@Body() addDoorLockTemporaryPasswordDto: AddDoorLockTemporaryPasswordDto,
|
||||
@Req() req: any,
|
||||
) {
|
||||
const userUuid = req.user.uuid;
|
||||
const temporaryPasswords =
|
||||
await this.visitorPasswordService.addOnlineTemporaryPasswordMultipleTime(
|
||||
addDoorLockOnlineMultipleDto,
|
||||
await this.visitorPasswordService.handleTemporaryPassword(
|
||||
addDoorLockTemporaryPasswordDto,
|
||||
userUuid,
|
||||
);
|
||||
|
||||
@ -57,92 +51,33 @@ export class VisitorPasswordController {
|
||||
data: temporaryPasswords,
|
||||
};
|
||||
}
|
||||
|
||||
@ApiBearerAuth()
|
||||
@UseGuards(PermissionsGuard)
|
||||
@Permissions('VISITOR_PASSWORD_ADD')
|
||||
@Post('temporary-password/online/one-time')
|
||||
@Get()
|
||||
@ApiOperation({
|
||||
summary:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS
|
||||
.ADD_ONLINE_TEMP_PASSWORD_ONE_TIME_SUMMARY,
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.GET_VISITOR_PASSWORD_SUMMARY,
|
||||
description:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS
|
||||
.ADD_ONLINE_TEMP_PASSWORD_ONE_TIME_DESCRIPTION,
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.GET_VISITOR_PASSWORD_DESCRIPTION,
|
||||
})
|
||||
async addOnlineTemporaryPassword(
|
||||
@Body() addDoorLockOnlineOneTimeDto: AddDoorLockOnlineOneTimeDto,
|
||||
@Req() req: any,
|
||||
) {
|
||||
const userUuid = req.user.uuid;
|
||||
const temporaryPasswords =
|
||||
await this.visitorPasswordService.addOnlineTemporaryPasswordOneTime(
|
||||
addDoorLockOnlineOneTimeDto,
|
||||
userUuid,
|
||||
);
|
||||
|
||||
return {
|
||||
statusCode: HttpStatus.CREATED,
|
||||
data: temporaryPasswords,
|
||||
};
|
||||
async GetVisitorPassword(@Req() req: any) {
|
||||
const projectUuid = req.user.project.uuid;
|
||||
return await this.visitorPasswordService.getPasswords(projectUuid);
|
||||
}
|
||||
|
||||
@ApiBearerAuth()
|
||||
@UseGuards(PermissionsGuard)
|
||||
@Permissions('VISITOR_PASSWORD_ADD')
|
||||
@Post('temporary-password/offline/one-time')
|
||||
@Permissions('VISITOR_PASSWORD_VIEW')
|
||||
@Get('/devices')
|
||||
@ApiOperation({
|
||||
summary:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS
|
||||
.ADD_OFFLINE_TEMP_PASSWORD_ONE_TIME_SUMMARY,
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.GET_VISITOR_DEVICES_SUMMARY,
|
||||
description:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS
|
||||
.ADD_OFFLINE_TEMP_PASSWORD_ONE_TIME_DESCRIPTION,
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS.GET_VISITOR_DEVICES_DESCRIPTION,
|
||||
})
|
||||
async addOfflineOneTimeTemporaryPassword(
|
||||
@Body() addDoorLockOfflineOneTimeDto: AddDoorLockOfflineOneTimeDto,
|
||||
@Req() req: any,
|
||||
) {
|
||||
const userUuid = req.user.uuid;
|
||||
const temporaryPassword =
|
||||
await this.visitorPasswordService.addOfflineOneTimeTemporaryPassword(
|
||||
addDoorLockOfflineOneTimeDto,
|
||||
userUuid,
|
||||
);
|
||||
|
||||
return {
|
||||
statusCode: HttpStatus.CREATED,
|
||||
data: temporaryPassword,
|
||||
};
|
||||
}
|
||||
|
||||
@ApiBearerAuth()
|
||||
@UseGuards(PermissionsGuard)
|
||||
@Permissions('VISITOR_PASSWORD_ADD')
|
||||
@Post('temporary-password/offline/multiple-time')
|
||||
@ApiOperation({
|
||||
summary:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS
|
||||
.ADD_OFFLINE_TEMP_PASSWORD_MULTIPLE_TIME_SUMMARY,
|
||||
description:
|
||||
ControllerRoute.VISITOR_PASSWORD.ACTIONS
|
||||
.ADD_OFFLINE_TEMP_PASSWORD_MULTIPLE_TIME_DESCRIPTION,
|
||||
})
|
||||
async addOfflineMultipleTimeTemporaryPassword(
|
||||
@Body()
|
||||
addDoorLockOfflineMultipleDto: AddDoorLockOfflineMultipleDto,
|
||||
@Req() req: any,
|
||||
) {
|
||||
const userUuid = req.user.uuid;
|
||||
const temporaryPassword =
|
||||
await this.visitorPasswordService.addOfflineMultipleTimeTemporaryPassword(
|
||||
addDoorLockOfflineMultipleDto,
|
||||
userUuid,
|
||||
);
|
||||
|
||||
return {
|
||||
statusCode: HttpStatus.CREATED,
|
||||
data: temporaryPassword,
|
||||
};
|
||||
async GetVisitorDevices(@Req() req: any) {
|
||||
const projectUuid = req.user.project.uuid;
|
||||
return await this.visitorPasswordService.getAllPassDevices(projectUuid);
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import {
|
||||
} from 'class-validator';
|
||||
import { Type } from 'class-transformer';
|
||||
import { WorkingDays } from '@app/common/constants/working-days';
|
||||
import { VisitorPasswordEnum } from '@app/common/constants/visitor-password.enum';
|
||||
|
||||
class ScheduleDto {
|
||||
@ApiProperty({
|
||||
@ -211,3 +212,73 @@ export class AddDoorLockOfflineMultipleDto {
|
||||
@IsNotEmpty()
|
||||
public invalidTime: string;
|
||||
}
|
||||
export class AddDoorLockTemporaryPasswordDto {
|
||||
@ApiProperty({
|
||||
description: 'Operation type',
|
||||
enum: VisitorPasswordEnum,
|
||||
required: true,
|
||||
})
|
||||
@IsEnum(VisitorPasswordEnum)
|
||||
@IsNotEmpty()
|
||||
public operationType: VisitorPasswordEnum;
|
||||
|
||||
@ApiProperty({
|
||||
description: 'email',
|
||||
required: true,
|
||||
})
|
||||
@IsEmail()
|
||||
@IsNotEmpty()
|
||||
public email: string;
|
||||
|
||||
@ApiProperty({
|
||||
description: 'devicesUuid',
|
||||
required: true,
|
||||
})
|
||||
@IsArray()
|
||||
@IsNotEmpty()
|
||||
public devicesUuid: string[];
|
||||
|
||||
@ApiProperty({
|
||||
description: 'password name',
|
||||
required: true,
|
||||
})
|
||||
@IsString()
|
||||
@IsNotEmpty()
|
||||
public passwordName: string;
|
||||
|
||||
@ApiProperty({
|
||||
description: 'password',
|
||||
required: true,
|
||||
})
|
||||
@IsString()
|
||||
@IsNotEmpty()
|
||||
@Length(7, 7)
|
||||
public password: string;
|
||||
|
||||
@ApiProperty({
|
||||
description: 'effectiveTime',
|
||||
required: false,
|
||||
})
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
public effectiveTime: string;
|
||||
|
||||
@ApiProperty({
|
||||
description: 'invalidTime',
|
||||
required: false,
|
||||
})
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
public invalidTime: string;
|
||||
|
||||
@ApiProperty({
|
||||
description: 'scheduleList',
|
||||
type: [ScheduleDto],
|
||||
required: false,
|
||||
})
|
||||
@IsArray()
|
||||
@ValidateNested({ each: true })
|
||||
@IsOptional()
|
||||
@Type(() => ScheduleDto)
|
||||
public scheduleList: ScheduleDto[];
|
||||
}
|
||||
|
@ -1,5 +1,10 @@
|
||||
import { VisitorPasswordRepository } from './../../../libs/common/src/modules/visitor-password/repositories/visitor-password.repository';
|
||||
import { Injectable, HttpException, HttpStatus } from '@nestjs/common';
|
||||
import {
|
||||
Injectable,
|
||||
HttpException,
|
||||
HttpStatus,
|
||||
BadRequestException,
|
||||
} from '@nestjs/common';
|
||||
import { TuyaContext } from '@tuya/tuya-connector-nodejs';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import {
|
||||
@ -9,13 +14,7 @@ import {
|
||||
import { DeviceRepository } from '@app/common/modules/device/repositories';
|
||||
import { ProductType } from '@app/common/constants/product-type.enum';
|
||||
|
||||
import {
|
||||
AddDoorLockOfflineMultipleDto,
|
||||
AddDoorLockOfflineOneTimeDto,
|
||||
AddDoorLockOnlineMultipleDto,
|
||||
AddDoorLockOnlineOneTimeDto,
|
||||
ProjectParam,
|
||||
} from '../dtos';
|
||||
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';
|
||||
@ -32,6 +31,7 @@ import {
|
||||
CommonHours,
|
||||
} from '@app/common/constants/hours-minutes.enum';
|
||||
import { ProjectRepository } from '@app/common/modules/project/repositiories';
|
||||
import { VisitorPasswordEnum } from '@app/common/constants/visitor-password.enum';
|
||||
|
||||
@Injectable()
|
||||
export class VisitorPasswordService {
|
||||
@ -55,9 +55,39 @@ export class VisitorPasswordService {
|
||||
secretKey,
|
||||
});
|
||||
}
|
||||
async handleTemporaryPassword(
|
||||
addDoorLockTemporaryPasswordDto: AddDoorLockTemporaryPasswordDto,
|
||||
userUuid: string,
|
||||
) {
|
||||
const { operationType } = addDoorLockTemporaryPasswordDto;
|
||||
|
||||
switch (operationType) {
|
||||
case VisitorPasswordEnum.ONLINE_ONE_TIME:
|
||||
return this.addOnlineTemporaryPasswordOneTime(
|
||||
addDoorLockTemporaryPasswordDto,
|
||||
userUuid,
|
||||
);
|
||||
case VisitorPasswordEnum.ONLINE_MULTIPLE_TIME:
|
||||
return this.addOnlineTemporaryPasswordMultipleTime(
|
||||
addDoorLockTemporaryPasswordDto,
|
||||
userUuid,
|
||||
);
|
||||
case VisitorPasswordEnum.OFFLINE_ONE_TIME:
|
||||
return this.addOfflineOneTimeTemporaryPassword(
|
||||
addDoorLockTemporaryPasswordDto,
|
||||
userUuid,
|
||||
);
|
||||
case VisitorPasswordEnum.OFFLINE_MULTIPLE_TIME:
|
||||
return this.addOfflineMultipleTimeTemporaryPassword(
|
||||
addDoorLockTemporaryPasswordDto,
|
||||
userUuid,
|
||||
);
|
||||
default:
|
||||
throw new BadRequestException('Invalid operation type');
|
||||
}
|
||||
}
|
||||
async addOfflineMultipleTimeTemporaryPassword(
|
||||
addDoorLockOfflineMultipleDto: AddDoorLockOfflineMultipleDto,
|
||||
addDoorLockOfflineMultipleDto: AddDoorLockTemporaryPasswordDto,
|
||||
userUuid: string,
|
||||
) {
|
||||
try {
|
||||
@ -178,7 +208,7 @@ export class VisitorPasswordService {
|
||||
}
|
||||
|
||||
async addOfflineOneTimeTemporaryPassword(
|
||||
addDoorLockOfflineOneTimeDto: AddDoorLockOfflineOneTimeDto,
|
||||
addDoorLockOfflineOneTimeDto: AddDoorLockTemporaryPasswordDto,
|
||||
userUuid: string,
|
||||
) {
|
||||
try {
|
||||
@ -301,7 +331,7 @@ export class VisitorPasswordService {
|
||||
async addOfflineTemporaryPasswordTuya(
|
||||
doorLockUuid: string,
|
||||
type: string,
|
||||
addDoorLockOfflineMultipleDto: AddDoorLockOfflineMultipleDto,
|
||||
addDoorLockOfflineMultipleDto: AddDoorLockTemporaryPasswordDto,
|
||||
passwordName: string,
|
||||
): Promise<createTickInterface> {
|
||||
try {
|
||||
@ -329,7 +359,7 @@ export class VisitorPasswordService {
|
||||
}
|
||||
}
|
||||
async addOnlineTemporaryPasswordMultipleTime(
|
||||
addDoorLockOnlineMultipleDto: AddDoorLockOnlineMultipleDto,
|
||||
addDoorLockOnlineMultipleDto: AddDoorLockTemporaryPasswordDto,
|
||||
userUuid: string,
|
||||
) {
|
||||
try {
|
||||
@ -447,8 +477,8 @@ export class VisitorPasswordService {
|
||||
);
|
||||
}
|
||||
}
|
||||
async getPasswords(param: ProjectParam) {
|
||||
await this.validateProject(param.projectUuid);
|
||||
async getPasswords(projectUuid: string) {
|
||||
await this.validateProject(projectUuid);
|
||||
|
||||
const deviceIds = await this.deviceRepository.find({
|
||||
where: {
|
||||
@ -458,7 +488,7 @@ export class VisitorPasswordService {
|
||||
spaceDevice: {
|
||||
community: {
|
||||
project: {
|
||||
uuid: param.projectUuid,
|
||||
uuid: projectUuid,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -499,8 +529,8 @@ export class VisitorPasswordService {
|
||||
});
|
||||
}
|
||||
|
||||
async getAllPassDevices(param: ProjectParam) {
|
||||
await this.validateProject(param.projectUuid);
|
||||
async getAllPassDevices(projectUuid: string) {
|
||||
await this.validateProject(projectUuid);
|
||||
|
||||
const devices = await this.deviceRepository.find({
|
||||
where: {
|
||||
@ -510,7 +540,7 @@ export class VisitorPasswordService {
|
||||
spaceDevice: {
|
||||
community: {
|
||||
project: {
|
||||
uuid: param.projectUuid,
|
||||
uuid: projectUuid,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -548,7 +578,7 @@ export class VisitorPasswordService {
|
||||
}
|
||||
|
||||
async addOnlineTemporaryPasswordOneTime(
|
||||
addDoorLockOnlineOneTimeDto: AddDoorLockOnlineOneTimeDto,
|
||||
addDoorLockOnlineOneTimeDto: AddDoorLockTemporaryPasswordDto,
|
||||
userUuid: string,
|
||||
) {
|
||||
try {
|
||||
|
@ -22,10 +22,9 @@ import {
|
||||
import { SceneDeviceRepository } from '@app/common/modules/scene-device/repositories';
|
||||
import { AutomationRepository } from '@app/common/modules/automation/repositories';
|
||||
import { ProjectRepository } from '@app/common/modules/project/repositiories';
|
||||
import { VisitorPasswordProjectController } from './controllers';
|
||||
@Module({
|
||||
imports: [ConfigModule, DeviceRepositoryModule, DoorLockModule],
|
||||
controllers: [VisitorPasswordController, VisitorPasswordProjectController],
|
||||
controllers: [VisitorPasswordController],
|
||||
providers: [
|
||||
VisitorPasswordService,
|
||||
EmailService,
|
||||
|
Reference in New Issue
Block a user