Merge pull request #24 from SyncrowIOT/SP-171-be-create-groups-to-control-devices-per-group

Sp 171 be create groups to control devices per group
This commit is contained in:
VirajBrainvire
2024-04-23 15:41:13 +05:30
committed by GitHub
73 changed files with 1604 additions and 319 deletions

View File

@ -1,20 +1,19 @@
import { IsNotEmpty, IsString } from "class-validator";
import { IsNotEmpty, IsString } from 'class-validator';
export class DeviceDto{
export class DeviceDto {
@IsString()
@IsNotEmpty()
public uuid: string;
@IsString()
@IsNotEmpty()
public uuid: string;
@IsString()
@IsNotEmpty()
spaceUuid:string;
@IsString()
@IsNotEmpty()
spaceUuid: string;
@IsString()
@IsNotEmpty()
deviceTuyaUuid:string;
@IsString()
@IsNotEmpty()
deviceTuyaUuid: string;
@IsString()
@IsNotEmpty()
productUuid:string;
}
@IsString()
@IsNotEmpty()
productUuid: string;
}

View File

@ -2,6 +2,7 @@ import { Column, Entity, OneToMany } from 'typeorm';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { DeviceDto } from '../dtos/device.dto';
import { DeviceUserPermissionEntity } from './device-user-type.entity';
import { GroupDeviceEntity } from '../../group-device/entities';
@Entity({ name: 'device' })
export class DeviceEntity extends AbstractEntity<DeviceDto> {
@ -37,6 +38,12 @@ export class DeviceEntity extends AbstractEntity<DeviceDto> {
)
permission: DeviceUserPermissionEntity[];
@OneToMany(
() => GroupDeviceEntity,
(userGroupDevices) => userGroupDevices.device,
)
userGroupDevices: GroupDeviceEntity[];
constructor(partial: Partial<DeviceEntity>) {
super();
Object.assign(this, partial);

View File

@ -0,0 +1,15 @@
import { IsNotEmpty, IsString } from 'class-validator';
export class GroupDeviceDto {
@IsString()
@IsNotEmpty()
public uuid: string;
@IsString()
@IsNotEmpty()
public deviceUuid: string;
@IsString()
@IsNotEmpty()
public groupUuid: string;
}

View File

@ -0,0 +1 @@
export * from './group.device.dto';

View File

@ -0,0 +1,36 @@
import { Column, Entity, ManyToOne, Unique } from 'typeorm';
import { GroupDeviceDto } from '../dtos';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { DeviceEntity } from '../../device/entities';
import { GroupEntity } from '../../group/entities';
@Entity({ name: 'group-device' })
@Unique(['device', 'group'])
export class GroupDeviceEntity extends AbstractEntity<GroupDeviceDto> {
@Column({
type: 'uuid',
default: () => 'gen_random_uuid()', // Use gen_random_uuid() for default value
nullable: false,
})
public uuid: string;
@ManyToOne(() => DeviceEntity, (device) => device.userGroupDevices, {
nullable: false,
})
device: DeviceEntity;
@ManyToOne(() => GroupEntity, (group) => group.groupDevices, {
nullable: false,
})
group: GroupEntity;
@Column({
nullable: true,
default: true,
})
public isActive: boolean;
constructor(partial: Partial<GroupDeviceEntity>) {
super();
Object.assign(this, partial);
}
}

View File

@ -0,0 +1 @@
export * from './group.device.entity';

View File

@ -0,0 +1,11 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { GroupDeviceEntity } from './entities/group.device.entity';
@Module({
providers: [],
exports: [],
controllers: [],
imports: [TypeOrmModule.forFeature([GroupDeviceEntity])],
})
export class GroupDeviceRepositoryModule {}

View File

@ -0,0 +1,10 @@
import { DataSource, Repository } from 'typeorm';
import { Injectable } from '@nestjs/common';
import { GroupDeviceEntity } from '../entities/group.device.entity';
@Injectable()
export class GroupDeviceRepository extends Repository<GroupDeviceEntity> {
constructor(private dataSource: DataSource) {
super(GroupDeviceEntity, dataSource.createEntityManager());
}
}

View File

@ -0,0 +1 @@
export * from './group.device.repository';

View File

@ -0,0 +1,11 @@
import { IsNotEmpty, IsString } from 'class-validator';
export class GroupDto {
@IsString()
@IsNotEmpty()
public uuid: string;
@IsString()
@IsNotEmpty()
public groupName: string;
}

View File

@ -0,0 +1 @@
export * from './group.dto';

View File

@ -0,0 +1,35 @@
import { Column, Entity, OneToMany } from 'typeorm';
import { GroupDto } from '../dtos';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { GroupDeviceEntity } from '../../group-device/entities';
@Entity({ name: 'group' })
export class GroupEntity extends AbstractEntity<GroupDto> {
@Column({
type: 'uuid',
default: () => 'gen_random_uuid()', // Use gen_random_uuid() for default value
nullable: false,
})
public uuid: string;
@Column({
nullable: false,
})
public groupName: string;
@OneToMany(() => GroupDeviceEntity, (groupDevice) => groupDevice.group, {
cascade: true,
onDelete: 'CASCADE',
})
groupDevices: GroupDeviceEntity[];
@Column({
nullable: true,
default: true,
})
public isActive: boolean;
constructor(partial: Partial<GroupEntity>) {
super();
Object.assign(this, partial);
}
}

View File

@ -0,0 +1 @@
export * from './group.entity';

View File

@ -0,0 +1,11 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { GroupEntity } from './entities/group.entity';
@Module({
providers: [],
exports: [],
controllers: [],
imports: [TypeOrmModule.forFeature([GroupEntity])],
})
export class GroupRepositoryModule {}

View File

@ -0,0 +1,10 @@
import { DataSource, Repository } from 'typeorm';
import { Injectable } from '@nestjs/common';
import { GroupEntity } from '../entities/group.entity';
@Injectable()
export class GroupRepository extends Repository<GroupEntity> {
constructor(private dataSource: DataSource) {
super(GroupEntity, dataSource.createEntityManager());
}
}

View File

@ -0,0 +1 @@
export * from './group.repository';

View File

@ -1 +1 @@
export * from './permission.dto'
export * from './permission.dto';

View File

@ -1 +1 @@
export * from './permission.entity'
export * from './permission.entity';

View File

@ -1 +1 @@
export * from './permission.repository'
export * from './permission.repository';

View File

@ -2,6 +2,7 @@ import { Column, Entity, ManyToOne, OneToMany } from 'typeorm';
import { SpaceDto } from '../dtos';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { SpaceTypeEntity } from '../../space-type/entities';
import { UserSpaceEntity } from '../../user-space/entities';
@Entity({ name: 'space' })
export class SpaceEntity extends AbstractEntity<SpaceDto> {
@ -26,6 +27,9 @@ export class SpaceEntity extends AbstractEntity<SpaceDto> {
})
spaceType: SpaceTypeEntity;
@OneToMany(() => UserSpaceEntity, (userSpace) => userSpace.space)
userSpaces: UserSpaceEntity[];
constructor(partial: Partial<SpaceEntity>) {
super();
Object.assign(this, partial);

View File

@ -0,0 +1 @@
export * from './user.space.dto';

View File

@ -0,0 +1,15 @@
import { IsNotEmpty, IsString } from 'class-validator';
export class UserSpaceDto {
@IsString()
@IsNotEmpty()
public uuid: string;
@IsString()
@IsNotEmpty()
public spaceUuid: string;
@IsString()
@IsNotEmpty()
public userUuid: string;
}

View File

@ -0,0 +1 @@
export * from './user.space.entity';

View File

@ -0,0 +1,29 @@
import { Column, Entity, ManyToOne, Unique } from 'typeorm';
import { UserSpaceDto } from '../dtos';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { SpaceEntity } from '../../space/entities';
import { UserEntity } from '../../user/entities';
@Entity({ name: 'user-space' })
@Unique(['user', 'space'])
export class UserSpaceEntity extends AbstractEntity<UserSpaceDto> {
@Column({
type: 'uuid',
default: () => 'gen_random_uuid()', // Use gen_random_uuid() for default value
nullable: false,
})
public uuid: string;
@ManyToOne(() => UserEntity, (user) => user.userSpaces, { nullable: false })
user: UserEntity;
@ManyToOne(() => SpaceEntity, (space) => space.userSpaces, {
nullable: false,
})
space: SpaceEntity;
constructor(partial: Partial<UserSpaceEntity>) {
super();
Object.assign(this, partial);
}
}

View File

@ -0,0 +1 @@
export * from './user.space.repository';

View File

@ -0,0 +1,10 @@
import { DataSource, Repository } from 'typeorm';
import { Injectable } from '@nestjs/common';
import { UserSpaceEntity } from '../entities/user.space.entity';
@Injectable()
export class UserSpaceRepository extends Repository<UserSpaceEntity> {
constructor(private dataSource: DataSource) {
super(UserSpaceEntity, dataSource.createEntityManager());
}
}

View File

@ -0,0 +1,11 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserSpaceEntity } from './entities/user.space.entity';
@Module({
providers: [],
exports: [],
controllers: [],
imports: [TypeOrmModule.forFeature([UserSpaceEntity])],
})
export class UserSpaceRepositoryModule {}

View File

@ -0,0 +1 @@
export * from './user.entity';

View File

@ -1,6 +1,7 @@
import { Column, Entity } from 'typeorm';
import { Column, Entity, OneToMany } from 'typeorm';
import { UserDto } from '../dtos';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { UserSpaceEntity } from '../../user-space/entities';
@Entity({ name: 'user' })
export class UserEntity extends AbstractEntity<UserDto> {
@ -47,6 +48,9 @@ export class UserEntity extends AbstractEntity<UserDto> {
})
public isActive: boolean;
@OneToMany(() => UserSpaceEntity, (userSpace) => userSpace.user)
userSpaces: UserSpaceEntity[];
constructor(partial: Partial<UserEntity>) {
super();
Object.assign(this, partial);