mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-14 18:05:48 +00:00
Add user device permission CRUD operations
This commit is contained in:
@ -0,0 +1 @@
|
|||||||
|
export * from './user-device-permission.controller';
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import {
|
import {
|
||||||
Body,
|
Body,
|
||||||
Controller,
|
Controller,
|
||||||
|
Delete,
|
||||||
Get,
|
Get,
|
||||||
|
HttpException,
|
||||||
HttpStatus,
|
HttpStatus,
|
||||||
Param,
|
Param,
|
||||||
Post,
|
Post,
|
||||||
@ -24,8 +26,8 @@ export class UserDevicePermissionController {
|
|||||||
private readonly userDevicePermissionService: UserDevicePermissionService,
|
private readonly userDevicePermissionService: UserDevicePermissionService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@ApiBearerAuth()
|
// @ApiBearerAuth()
|
||||||
@UseGuards(JwtAuthGuard)
|
// @UseGuards(JwtAuthGuard)
|
||||||
@Post('add')
|
@Post('add')
|
||||||
async addDevicePermission(
|
async addDevicePermission(
|
||||||
@Body() userDevicePermissionDto: UserDevicePermissionAddDto,
|
@Body() userDevicePermissionDto: UserDevicePermissionAddDto,
|
||||||
@ -40,40 +42,45 @@ export class UserDevicePermissionController {
|
|||||||
message: 'User Permission for Devices Added Successfully',
|
message: 'User Permission for Devices Added Successfully',
|
||||||
data: addDetails,
|
data: addDetails,
|
||||||
};
|
};
|
||||||
} catch (err) {
|
} catch (error) {
|
||||||
throw new Error(err);
|
throw new HttpException(
|
||||||
|
error.message || 'Internal server error',
|
||||||
|
error.status || HttpStatus.INTERNAL_SERVER_ERROR,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiBearerAuth()
|
@ApiBearerAuth()
|
||||||
@UseGuards(JwtAuthGuard)
|
@UseGuards(JwtAuthGuard)
|
||||||
@Put('edit/:userId')
|
@Put('edit/:devicePermissionUuid')
|
||||||
async editDevicePermission(
|
async editDevicePermission(
|
||||||
@Param('userId') userId: string,
|
@Param('devicePermissionUuid') devicePermissionUuid: string,
|
||||||
@Body() userDevicePermissionEditDto: UserDevicePermissionEditDto,
|
@Body() userDevicePermissionEditDto: UserDevicePermissionEditDto,
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
await this.userDevicePermissionService.editUserPermission(
|
await this.userDevicePermissionService.editUserPermission(
|
||||||
userId,
|
devicePermissionUuid,
|
||||||
userDevicePermissionEditDto,
|
userDevicePermissionEditDto,
|
||||||
);
|
);
|
||||||
return {
|
return {
|
||||||
statusCode: HttpStatus.OK,
|
statusCode: HttpStatus.OK,
|
||||||
message: 'User Permission for Devices Updated Successfully',
|
message: 'User Permission for Devices Updated Successfully',
|
||||||
data: {},
|
|
||||||
};
|
};
|
||||||
} catch (err) {
|
} catch (error) {
|
||||||
throw new Error(err);
|
throw new HttpException(
|
||||||
|
error.message || 'Internal server error',
|
||||||
|
error.status || HttpStatus.INTERNAL_SERVER_ERROR,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiBearerAuth()
|
@ApiBearerAuth()
|
||||||
@UseGuards(JwtAuthGuard)
|
@UseGuards(JwtAuthGuard)
|
||||||
@Get('list')
|
@Get(':deviceUuid/list')
|
||||||
async fetchDevicePermission() {
|
async fetchDevicePermission(@Param('deviceUuid') deviceUuid: string) {
|
||||||
try {
|
try {
|
||||||
const deviceDetails =
|
const deviceDetails =
|
||||||
await this.userDevicePermissionService.fetchuserPermission();
|
await this.userDevicePermissionService.fetchUserPermission(deviceUuid);
|
||||||
return {
|
return {
|
||||||
statusCode: HttpStatus.OK,
|
statusCode: HttpStatus.OK,
|
||||||
message: 'Device Details fetched Successfully',
|
message: 'Device Details fetched Successfully',
|
||||||
@ -83,4 +90,25 @@ export class UserDevicePermissionController {
|
|||||||
throw new Error(err);
|
throw new Error(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ApiBearerAuth()
|
||||||
|
@UseGuards(JwtAuthGuard)
|
||||||
|
@Delete(':devicePermissionUuid')
|
||||||
|
async deleteDevicePermission(
|
||||||
|
@Param('devicePermissionUuid') devicePermissionUuid: string,
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
await this.userDevicePermissionService.deleteDevicePermission(
|
||||||
|
devicePermissionUuid,
|
||||||
|
);
|
||||||
|
return {
|
||||||
|
statusCode: HttpStatus.OK,
|
||||||
|
message: 'User Permission for Devices Deleted Successfully',
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(
|
||||||
|
error.message || 'Internal server error',
|
||||||
|
error.status || HttpStatus.INTERNAL_SERVER_ERROR,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
export * from './user-device-permission.add.dto';
|
||||||
|
export * from './user-device-permission.edit.dto';
|
||||||
|
@ -1,28 +1,29 @@
|
|||||||
|
import { PermissionType } from '@app/common/constants/permission-type.enum';
|
||||||
import { ApiProperty } from '@nestjs/swagger';
|
import { ApiProperty } from '@nestjs/swagger';
|
||||||
import { IsNotEmpty, IsString } from 'class-validator';
|
import { IsEnum, IsNotEmpty, IsString } from 'class-validator';
|
||||||
|
|
||||||
export class UserDevicePermissionAddDto {
|
export class UserDevicePermissionAddDto {
|
||||||
@ApiProperty({
|
@ApiProperty({
|
||||||
description: 'user id',
|
description: 'user uuid',
|
||||||
required: true,
|
required: true,
|
||||||
})
|
})
|
||||||
@IsString()
|
@IsString()
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
userId: string;
|
userUuid: string;
|
||||||
|
|
||||||
@ApiProperty({
|
@ApiProperty({
|
||||||
description: 'permission type id',
|
description: 'permission type',
|
||||||
|
enum: PermissionType,
|
||||||
required: true,
|
required: true,
|
||||||
})
|
})
|
||||||
@IsString()
|
@IsEnum(PermissionType)
|
||||||
@IsNotEmpty()
|
permissionType: PermissionType;
|
||||||
permissionTypeId: string;
|
|
||||||
|
|
||||||
@ApiProperty({
|
@ApiProperty({
|
||||||
description: 'device id',
|
description: 'device uuid',
|
||||||
required: true,
|
required: true,
|
||||||
})
|
})
|
||||||
@IsString()
|
@IsString()
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
deviceId: string;
|
deviceUuid: string;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
import { OmitType } from '@nestjs/swagger';
|
import { PermissionType } from '@app/common/constants/permission-type.enum';
|
||||||
import { UserDevicePermissionAddDto } from './user-device-permission.add.dto';
|
import { ApiProperty } from '@nestjs/swagger';
|
||||||
|
import { IsEnum } from 'class-validator';
|
||||||
|
|
||||||
export class UserDevicePermissionEditDto extends OmitType(
|
export class UserDevicePermissionEditDto {
|
||||||
UserDevicePermissionAddDto,
|
@ApiProperty({
|
||||||
['userId'],
|
description: 'permission type',
|
||||||
) {}
|
enum: PermissionType,
|
||||||
|
required: true,
|
||||||
|
})
|
||||||
|
@IsEnum(PermissionType)
|
||||||
|
permissionType: PermissionType;
|
||||||
|
}
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
export * from './user-device-permission.service';
|
||||||
|
@ -1,38 +1,107 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
||||||
import { UserDevicePermissionAddDto } from '../dtos/user-device-permission.add.dto';
|
import { UserDevicePermissionAddDto } from '../dtos/user-device-permission.add.dto';
|
||||||
import { UserDevicePermissionEditDto } from '../dtos/user-device-permission.edit.dto';
|
import { UserDevicePermissionEditDto } from '../dtos/user-device-permission.edit.dto';
|
||||||
import { DeviceUserPermissionRepository } from '@app/common/modules/device-user-permission/repositories';
|
import { DeviceUserPermissionRepository } from '@app/common/modules/device-user-permission/repositories';
|
||||||
|
import { PermissionTypeRepository } from '@app/common/modules/permission/repositories';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class UserDevicePermissionService {
|
export class UserDevicePermissionService {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly deviceUserPermissionRepository: DeviceUserPermissionRepository,
|
private readonly deviceUserPermissionRepository: DeviceUserPermissionRepository,
|
||||||
|
private readonly permissionTypeRepository: PermissionTypeRepository,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async addUserPermission(userDevicePermissionDto: UserDevicePermissionAddDto) {
|
async addUserPermission(userDevicePermissionDto: UserDevicePermissionAddDto) {
|
||||||
return await this.deviceUserPermissionRepository.save({
|
try {
|
||||||
userUuid: userDevicePermissionDto.userId,
|
const permissionType = await this.getPermissionType(
|
||||||
deviceUuid: userDevicePermissionDto.deviceId,
|
userDevicePermissionDto.permissionType,
|
||||||
permissionTypeUuid: userDevicePermissionDto.permissionTypeId,
|
);
|
||||||
});
|
return await this.deviceUserPermissionRepository.save({
|
||||||
|
userUuid: userDevicePermissionDto.userUuid,
|
||||||
|
deviceUuid: userDevicePermissionDto.deviceUuid,
|
||||||
|
permissionType: {
|
||||||
|
uuid: permissionType.uuid,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
if (error.code === '23505') {
|
||||||
|
throw new HttpException(
|
||||||
|
'This Permission already belongs to this user',
|
||||||
|
HttpStatus.BAD_REQUEST,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
throw new HttpException(
|
||||||
|
error.message || 'Internal Server Error',
|
||||||
|
HttpStatus.INTERNAL_SERVER_ERROR,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async editUserPermission(
|
async editUserPermission(
|
||||||
userId: string,
|
devicePermissionUuid: string,
|
||||||
userDevicePermissionEditDto: UserDevicePermissionEditDto,
|
userDevicePermissionEditDto: UserDevicePermissionEditDto,
|
||||||
) {
|
) {
|
||||||
return await this.deviceUserPermissionRepository.update(
|
try {
|
||||||
{ userUuid: userId },
|
const permissionType = await this.getPermissionType(
|
||||||
{
|
userDevicePermissionEditDto.permissionType,
|
||||||
deviceUuid: userDevicePermissionEditDto.deviceId,
|
);
|
||||||
permissionType: {
|
return await this.deviceUserPermissionRepository.update(
|
||||||
uuid: userDevicePermissionEditDto.permissionTypeId,
|
{ uuid: devicePermissionUuid },
|
||||||
|
{
|
||||||
|
permissionType: {
|
||||||
|
uuid: permissionType.uuid,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
);
|
||||||
);
|
} catch (error) {
|
||||||
|
if (error.code === '23505') {
|
||||||
|
throw new HttpException(
|
||||||
|
'This Permission already belongs to this user',
|
||||||
|
HttpStatus.BAD_REQUEST,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
throw new HttpException(
|
||||||
|
error.message || 'Internal Server Error',
|
||||||
|
HttpStatus.INTERNAL_SERVER_ERROR,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fetchuserPermission() {
|
async fetchUserPermission(deviceUuid: string) {
|
||||||
return await this.deviceUserPermissionRepository.find();
|
const devicePermissions = await this.deviceUserPermissionRepository.find({
|
||||||
|
where: {
|
||||||
|
deviceUuid: deviceUuid,
|
||||||
|
},
|
||||||
|
relations: ['permissionType', 'user'],
|
||||||
|
});
|
||||||
|
return devicePermissions.map((permission) => {
|
||||||
|
return {
|
||||||
|
uuid: permission.uuid,
|
||||||
|
deviceUuid: permission.deviceUuid,
|
||||||
|
firstName: permission.user.firstName,
|
||||||
|
lastName: permission.user.lastName,
|
||||||
|
email: permission.user.email,
|
||||||
|
permissionType: permission.permissionType.type,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
private async getPermissionType(permissionType: string) {
|
||||||
|
return await this.permissionTypeRepository.findOne({
|
||||||
|
where: {
|
||||||
|
type: permissionType,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async deleteDevicePermission(devicePermissionUuid: string) {
|
||||||
|
try {
|
||||||
|
return await this.deviceUserPermissionRepository.delete({
|
||||||
|
uuid: devicePermissionUuid,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(
|
||||||
|
error.message || 'Internal Server Error',
|
||||||
|
HttpStatus.INTERNAL_SERVER_ERROR,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,14 @@ import { ConfigModule } from '@nestjs/config';
|
|||||||
import { UserDevicePermissionService } from './services/user-device-permission.service';
|
import { UserDevicePermissionService } from './services/user-device-permission.service';
|
||||||
import { UserDevicePermissionController } from './controllers/user-device-permission.controller';
|
import { UserDevicePermissionController } from './controllers/user-device-permission.controller';
|
||||||
import { DeviceUserPermissionRepository } from '@app/common/modules/device-user-permission/repositories';
|
import { DeviceUserPermissionRepository } from '@app/common/modules/device-user-permission/repositories';
|
||||||
|
import { PermissionTypeRepository } from '@app/common/modules/permission/repositories';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [ConfigModule, DeviceRepositoryModule],
|
imports: [ConfigModule, DeviceRepositoryModule],
|
||||||
controllers: [UserDevicePermissionController],
|
controllers: [UserDevicePermissionController],
|
||||||
providers: [
|
providers: [
|
||||||
DeviceUserPermissionRepository,
|
DeviceUserPermissionRepository,
|
||||||
|
PermissionTypeRepository,
|
||||||
DeviceRepository,
|
DeviceRepository,
|
||||||
UserDevicePermissionService,
|
UserDevicePermissionService,
|
||||||
],
|
],
|
||||||
|
Reference in New Issue
Block a user