diff --git a/libs/common/src/database/database.module.ts b/libs/common/src/database/database.module.ts index 06cff73..819be74 100644 --- a/libs/common/src/database/database.module.ts +++ b/libs/common/src/database/database.module.ts @@ -7,12 +7,16 @@ import { UserSessionEntity } from '../modules/session/entities/session.entity'; import { UserOtpEntity } from '../modules/user-otp/entities'; import { HomeEntity } from '../modules/home/entities'; import { ProductEntity } from '../modules/product/entities'; -import { DeviceEntity, DeviceUserPermissionEntity } from '../modules/device/entities'; +import { + DeviceEntity, + DeviceUserPermissionEntity, +} from '../modules/device/entities'; import { PermissionTypeEntity } from '../modules/permission/entities'; import { SpaceEntity } from '../modules/space/entities'; import { SpaceTypeEntity } from '../modules/space-type/entities'; import { UserSpaceEntity } from '../modules/user-space/entities'; import { GroupEntity } from '../modules/group/entities'; +import { GroupDeviceEntity } from '../modules/group-device/entities'; @Module({ imports: [ @@ -40,6 +44,7 @@ import { GroupEntity } from '../modules/group/entities'; SpaceTypeEntity, UserSpaceEntity, GroupEntity, + GroupDeviceEntity, ], namingStrategy: new SnakeNamingStrategy(), synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))), diff --git a/libs/common/src/modules/device/entities/device.entity.ts b/libs/common/src/modules/device/entities/device.entity.ts index d90d2d1..2c1837a 100644 --- a/libs/common/src/modules/device/entities/device.entity.ts +++ b/libs/common/src/modules/device/entities/device.entity.ts @@ -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 { @@ -37,6 +38,12 @@ export class DeviceEntity extends AbstractEntity { ) permission: DeviceUserPermissionEntity[]; + @OneToMany( + () => GroupDeviceEntity, + (userGroupDevices) => userGroupDevices.device, + ) + userGroupDevices: GroupDeviceEntity[]; + constructor(partial: Partial) { super(); Object.assign(this, partial); diff --git a/libs/common/src/modules/group-device/dtos/group.device.dto.ts b/libs/common/src/modules/group-device/dtos/group.device.dto.ts new file mode 100644 index 0000000..1a4d51c --- /dev/null +++ b/libs/common/src/modules/group-device/dtos/group.device.dto.ts @@ -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; +} diff --git a/libs/common/src/modules/group-device/dtos/index.ts b/libs/common/src/modules/group-device/dtos/index.ts new file mode 100644 index 0000000..66bc84a --- /dev/null +++ b/libs/common/src/modules/group-device/dtos/index.ts @@ -0,0 +1 @@ +export * from './group.device.dto'; diff --git a/libs/common/src/modules/group-device/entities/group.device.entity.ts b/libs/common/src/modules/group-device/entities/group.device.entity.ts new file mode 100644 index 0000000..d0ac5e7 --- /dev/null +++ b/libs/common/src/modules/group-device/entities/group.device.entity.ts @@ -0,0 +1,30 @@ +import { Column, Entity, ManyToOne } 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' }) +export class GroupDeviceEntity extends AbstractEntity { + @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; + + constructor(partial: Partial) { + super(); + Object.assign(this, partial); + } +} diff --git a/libs/common/src/modules/group-device/entities/index.ts b/libs/common/src/modules/group-device/entities/index.ts new file mode 100644 index 0000000..6b96f11 --- /dev/null +++ b/libs/common/src/modules/group-device/entities/index.ts @@ -0,0 +1 @@ +export * from './group.device.entity'; diff --git a/libs/common/src/modules/group-device/group.device.repository.module.ts b/libs/common/src/modules/group-device/group.device.repository.module.ts new file mode 100644 index 0000000..a3af56d --- /dev/null +++ b/libs/common/src/modules/group-device/group.device.repository.module.ts @@ -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 {} diff --git a/libs/common/src/modules/group-device/repositories/group.device.repository.ts b/libs/common/src/modules/group-device/repositories/group.device.repository.ts new file mode 100644 index 0000000..472c5aa --- /dev/null +++ b/libs/common/src/modules/group-device/repositories/group.device.repository.ts @@ -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 { + constructor(private dataSource: DataSource) { + super(GroupDeviceEntity, dataSource.createEntityManager()); + } +} diff --git a/libs/common/src/modules/group-device/repositories/index.ts b/libs/common/src/modules/group-device/repositories/index.ts new file mode 100644 index 0000000..2b40191 --- /dev/null +++ b/libs/common/src/modules/group-device/repositories/index.ts @@ -0,0 +1 @@ +export * from './group.device.repository'; diff --git a/libs/common/src/modules/group/entities/group.entity.ts b/libs/common/src/modules/group/entities/group.entity.ts index 9835e63..745ca42 100644 --- a/libs/common/src/modules/group/entities/group.entity.ts +++ b/libs/common/src/modules/group/entities/group.entity.ts @@ -1,6 +1,7 @@ -import { Column, Entity } from 'typeorm'; +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 { @@ -16,6 +17,9 @@ export class GroupEntity extends AbstractEntity { }) public groupName: string; + @OneToMany(() => GroupDeviceEntity, (groupDevice) => groupDevice.group) + groupDevices: GroupDeviceEntity[]; + constructor(partial: Partial) { super(); Object.assign(this, partial);