fixed entity relation, removed circular dependency

This commit is contained in:
hannathkadher
2025-02-10 20:36:29 +04:00
parent f5f9e9dfe3
commit e9a3cd14a8
40 changed files with 250 additions and 95 deletions

View File

@ -8,13 +8,7 @@ import { UserOtpEntity } from '../modules/user/entities';
import { ProductEntity } from '../modules/product/entities'; import { ProductEntity } from '../modules/product/entities';
import { DeviceEntity } from '../modules/device/entities'; import { DeviceEntity } from '../modules/device/entities';
import { PermissionTypeEntity } from '../modules/permission/entities'; import { PermissionTypeEntity } from '../modules/permission/entities';
import {
SpaceEntity,
SpaceLinkEntity,
SubspaceEntity,
SubspaceProductAllocationEntity,
TagEntity,
} from '../modules/space/entities';
import { UserSpaceEntity } from '../modules/user/entities'; import { UserSpaceEntity } from '../modules/user/entities';
import { DeviceUserPermissionEntity } from '../modules/device/entities'; import { DeviceUserPermissionEntity } from '../modules/device/entities';
import { RoleTypeEntity } from '../modules/role-type/entities'; import { RoleTypeEntity } from '../modules/role-type/entities';
@ -42,7 +36,12 @@ import {
import { InviteSpaceEntity } from '../modules/space/entities/invite-space.entity'; import { InviteSpaceEntity } from '../modules/space/entities/invite-space.entity';
import { AutomationEntity } from '../modules/automation/entities'; import { AutomationEntity } from '../modules/automation/entities';
import { SpaceProductAllocationEntity } from '../modules/space/entities/space-product-allocation.entity'; import { SpaceProductAllocationEntity } from '../modules/space/entities/space-product-allocation.entity';
import { NewTagEntity } from '../modules/tag'; import { NewTagEntity } from '../modules/tag/entities/tag.entity';
import { SpaceEntity } from '../modules/space/entities/space.entity';
import { SpaceLinkEntity } from '../modules/space/entities/space-link.entity';
import { SubspaceProductAllocationEntity } from '../modules/space/entities/subspace/subspace-product-allocation.entity';
import { SubspaceEntity } from '../modules/space/entities/subspace/subspace.entity';
import { TagEntity } from '../modules/space/entities/tag.entity';
@Module({ @Module({
imports: [ imports: [
TypeOrmModule.forRootAsync({ TypeOrmModule.forRootAsync({
@ -57,6 +56,7 @@ import { NewTagEntity } from '../modules/tag';
password: configService.get('DB_PASSWORD'), password: configService.get('DB_PASSWORD'),
database: configService.get('DB_NAME'), database: configService.get('DB_NAME'),
entities: [ entities: [
NewTagEntity,
ProjectEntity, ProjectEntity,
UserEntity, UserEntity,
UserSessionEntity, UserSessionEntity,
@ -93,7 +93,6 @@ import { NewTagEntity } from '../modules/tag';
SubspaceModelProductAllocationEntity, SubspaceModelProductAllocationEntity,
SpaceProductAllocationEntity, SpaceProductAllocationEntity,
SubspaceProductAllocationEntity, SubspaceProductAllocationEntity,
NewTagEntity,
], ],
namingStrategy: new SnakeNamingStrategy(), namingStrategy: new SnakeNamingStrategy(),
synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))), synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))),

View File

@ -12,10 +12,10 @@ import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { RoleTypeEntity } from '../../role-type/entities'; import { RoleTypeEntity } from '../../role-type/entities';
import { UserStatusEnum } from '@app/common/constants/user-status.enum'; import { UserStatusEnum } from '@app/common/constants/user-status.enum';
import { UserEntity } from '../../user/entities'; import { UserEntity } from '../../user/entities';
import { SpaceEntity } from '../../space/entities';
import { RoleType } from '@app/common/constants/role.type.enum'; import { RoleType } from '@app/common/constants/role.type.enum';
import { InviteUserDto, InviteUserSpaceDto } from '../dtos'; import { InviteUserDto, InviteUserSpaceDto } from '../dtos';
import { ProjectEntity } from '../../project/entities'; import { ProjectEntity } from '../../project/entities';
import { SpaceEntity } from '../../space/entities/space.entity';
@Entity({ name: 'invite-user' }) @Entity({ name: 'invite-user' })
@Unique(['email', 'project']) @Unique(['email', 'project'])

View File

@ -1,7 +1,7 @@
import { Column, Entity, JoinColumn, ManyToOne } from 'typeorm'; import { Column, Entity, JoinColumn, ManyToOne } from 'typeorm';
import { AutomationDto } from '../dtos'; import { AutomationDto } from '../dtos';
import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { SpaceEntity } from '../../space/entities'; import { SpaceEntity } from '../../space/entities/space.entity';
@Entity({ name: 'automation' }) @Entity({ name: 'automation' })
export class AutomationEntity extends AbstractEntity<AutomationDto> { export class AutomationEntity extends AbstractEntity<AutomationDto> {

View File

@ -1,8 +1,8 @@
import { Column, Entity, ManyToOne, OneToMany, Unique } from 'typeorm'; import { Column, Entity, ManyToOne, OneToMany, Unique } from 'typeorm';
import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { CommunityDto } from '../dtos'; import { CommunityDto } from '../dtos';
import { SpaceEntity } from '../../space/entities';
import { ProjectEntity } from '../../project/entities'; import { ProjectEntity } from '../../project/entities';
import { SpaceEntity } from '../../space/entities/space.entity';
@Entity({ name: 'community' }) @Entity({ name: 'community' })
@Unique(['name']) @Unique(['name'])

View File

@ -7,15 +7,19 @@ import {
Index, Index,
JoinColumn, JoinColumn,
OneToOne, OneToOne,
JoinTable,
} from 'typeorm'; } from 'typeorm';
import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { DeviceDto, DeviceUserPermissionDto } from '../dtos/device.dto'; import { DeviceDto, DeviceUserPermissionDto } from '../dtos/device.dto';
import { SpaceEntity, SubspaceEntity, TagEntity } from '../../space/entities';
import { ProductEntity } from '../../product/entities'; import { ProductEntity } from '../../product/entities';
import { UserEntity } from '../../user/entities'; import { UserEntity } from '../../user/entities';
import { DeviceNotificationDto } from '../dtos'; import { DeviceNotificationDto } from '../dtos';
import { PermissionTypeEntity } from '../../permission/entities'; import { PermissionTypeEntity } from '../../permission/entities';
import { SceneDeviceEntity } from '../../scene-device/entities'; import { SceneDeviceEntity } from '../../scene-device/entities';
import { SpaceEntity } from '../../space/entities/space.entity';
import { SubspaceEntity } from '../../space/entities/subspace/subspace.entity';
import { TagEntity } from '../../space/entities/tag.entity';
import { NewTagEntity } from '../../tag';
@Entity({ name: 'device' }) @Entity({ name: 'device' })
@Unique(['deviceTuyaUuid']) @Unique(['deviceTuyaUuid'])
@ -80,6 +84,10 @@ export class DeviceEntity extends AbstractEntity<DeviceDto> {
}) })
tag: TagEntity; tag: TagEntity;
@OneToMany(() => NewTagEntity, (tag) => tag.devices)
@JoinTable({ name: 'device_tags' })
public tags: NewTagEntity[];
constructor(partial: Partial<DeviceEntity>) { constructor(partial: Partial<DeviceEntity>) {
super(); super();
Object.assign(this, partial); Object.assign(this, partial);

View File

@ -3,7 +3,7 @@ import { SceneDto, SceneIconDto } from '../dtos';
import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { SceneIconType } from '@app/common/constants/secne-icon-type.enum'; import { SceneIconType } from '@app/common/constants/secne-icon-type.enum';
import { SceneDeviceEntity } from '../../scene-device/entities'; import { SceneDeviceEntity } from '../../scene-device/entities';
import { SpaceEntity } from '../../space/entities'; import { SpaceEntity } from '../../space/entities/space.entity';
// Define SceneIconEntity before SceneEntity // Define SceneIconEntity before SceneEntity
@Entity({ name: 'scene-icon' }) @Entity({ name: 'scene-icon' })

View File

@ -0,0 +1,39 @@
import {
IsUUID,
IsInt,
IsOptional,
ValidateNested,
IsArray,
} from 'class-validator';
import { Type } from 'class-transformer';
import { SpaceModelDto } from '../../space-model/dtos/space-model.dto';
import { ProductDto } from '../../product/dtos/product.dto';
import { NewTagDto } from '../../tag/dtos/tag.dto';
import { SpaceProductAllocationDto } from '../../space/dtos/space-product-allocation.dto';
export class SpaceModelProductAllocationDto {
@IsUUID()
uuid: string;
@ValidateNested()
@Type(() => SpaceModelDto)
spaceModel: SpaceModelDto;
@ValidateNested()
@Type(() => ProductDto)
product: ProductDto;
@IsInt()
allowedQuantity: number;
@IsArray()
@ValidateNested({ each: true })
@Type(() => NewTagDto)
allowedTags: NewTagDto[];
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => SpaceProductAllocationDto)
inheritedSpaceAllocations?: SpaceProductAllocationDto[];
}

View File

@ -0,0 +1,26 @@
import { IsUUID, IsInt, ValidateNested, IsArray } from 'class-validator';
import { Type } from 'class-transformer';
import { SubSpaceModelDto } from './subspace-model.dto';
import { ProductDto } from '@app/common/modules/product/dtos';
import { NewTagDto } from '@app/common/modules/tag/dtos';
export class SubspaceModelProductAllocationDto {
@IsUUID()
uuid: string;
@ValidateNested()
@Type(() => SubSpaceModelDto)
subspaceModel: SubSpaceModelDto;
@ValidateNested()
@Type(() => ProductDto)
product: ProductDto;
@IsInt()
allowedQuantity: number;
@IsArray()
@ValidateNested({ each: true })
@Type(() => NewTagDto)
allowedTags: NewTagDto[];
}

View File

@ -1,11 +1,19 @@
import { Entity, Column, ManyToOne, ManyToMany, JoinTable, OneToMany } from 'typeorm'; import {
Entity,
Column,
ManyToOne,
ManyToMany,
JoinTable,
OneToMany,
} from 'typeorm';
import { SpaceModelEntity } from './space-model.entity'; import { SpaceModelEntity } from './space-model.entity';
import { NewTagEntity } from '../../tag/entities'; import { NewTagEntity } from '../../tag/entities/tag.entity';
import { ProductEntity } from '../../product/entities'; import { ProductEntity } from '../../product/entities/product.entity';
import { SpaceProductAllocationEntity } from '../../space/entities/space-product-allocation.entity'; import { SpaceProductAllocationEntity } from '../../space/entities/space-product-allocation.entity';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
@Entity({ name: 'space_model_product_allocation' }) @Entity({ name: 'space_model_product_allocation' })
export class SpaceModelProductAllocationEntity { export class SpaceModelProductAllocationEntity extends AbstractEntity<SpaceModelProductAllocationEntity> {
@Column({ @Column({
type: 'uuid', type: 'uuid',
default: () => 'gen_random_uuid()', default: () => 'gen_random_uuid()',
@ -38,4 +46,9 @@ export class SpaceModelProductAllocationEntity {
}, },
) )
public inheritedSpaceAllocations: SpaceProductAllocationEntity[]; public inheritedSpaceAllocations: SpaceProductAllocationEntity[];
constructor(partial: Partial<SpaceModelProductAllocationEntity>) {
super();
Object.assign(this, partial);
}
} }

View File

@ -3,9 +3,9 @@ import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { SpaceModelDto } from '../dtos'; import { SpaceModelDto } from '../dtos';
import { SubspaceModelEntity } from './subspace-model'; import { SubspaceModelEntity } from './subspace-model';
import { ProjectEntity } from '../../project/entities'; import { ProjectEntity } from '../../project/entities';
import { SpaceEntity } from '../../space/entities';
import { TagModel } from './tag-model.entity'; import { TagModel } from './tag-model.entity';
import { SpaceModelProductAllocationEntity } from './space-model-product-allocation.entity'; import { SpaceModelProductAllocationEntity } from './space-model-product-allocation.entity';
import { SpaceEntity } from '../../space/entities/space.entity';
@Entity({ name: 'space-model' }) @Entity({ name: 'space-model' })
export class SpaceModelEntity extends AbstractEntity<SpaceModelDto> { export class SpaceModelEntity extends AbstractEntity<SpaceModelDto> {

View File

@ -1,21 +1,12 @@
import { import { Entity, Column, ManyToOne, ManyToMany, JoinTable } from 'typeorm';
Entity,
Column,
ManyToOne,
ManyToMany,
JoinTable,
Unique,
OneToMany,
} from 'typeorm';
import { SubspaceModelEntity } from './subspace-model.entity'; import { SubspaceModelEntity } from './subspace-model.entity';
import { ProductEntity } from '@app/common/modules/product/entities/product.entity';
import { NewTagEntity } from '@app/common/modules/tag'; import { NewTagEntity } from '@app/common/modules/tag/entities/tag.entity';
import { ProductEntity } from '@app/common/modules/product/entities'; import { SubspaceModelProductAllocationDto } from '../../dtos/subspace-model/subspace-model-product-allocation.dto';
import { SubspaceProductAllocationEntity } from '@app/common/modules/space'; import { AbstractEntity } from '@app/common/modules/abstract/entities/abstract.entity';
@Entity({ name: 'subspace_model_product_allocation' }) @Entity({ name: 'subspace_model_product_allocation' })
@Unique(['subspaceModel', 'product', 'allowedTags']) export class SubspaceModelProductAllocationEntity extends AbstractEntity<SubspaceModelProductAllocationDto> {
export class SubspaceModelProductAllocationEntity {
@Column({ @Column({
type: 'uuid', type: 'uuid',
default: () => 'gen_random_uuid()', default: () => 'gen_random_uuid()',
@ -26,7 +17,10 @@ export class SubspaceModelProductAllocationEntity {
@ManyToOne( @ManyToOne(
() => SubspaceModelEntity, () => SubspaceModelEntity,
(subspaceModel) => subspaceModel.productAllocations, (subspaceModel) => subspaceModel.productAllocations,
{ nullable: false, onDelete: 'CASCADE' }, {
nullable: false,
onDelete: 'CASCADE',
},
) )
public subspaceModel: SubspaceModelEntity; public subspaceModel: SubspaceModelEntity;
@ -36,16 +30,12 @@ export class SubspaceModelProductAllocationEntity {
@Column({ type: 'int', default: 1 }) @Column({ type: 'int', default: 1 })
public allowedQuantity: number; public allowedQuantity: number;
@ManyToMany(() => NewTagEntity) @ManyToMany(() => NewTagEntity, (tag) => tag.subspaceModelAllocations)
@JoinTable({ name: 'subspace_model_product_tags' }) @JoinTable({ name: 'subspace_model_product_tags' })
public allowedTags: NewTagEntity[]; public allowedTags: NewTagEntity[];
@OneToMany( constructor(partial: Partial<SubspaceModelProductAllocationEntity>) {
() => SubspaceProductAllocationEntity, super();
(allocation) => allocation.inheritedFromModel, Object.assign(this, partial);
{ }
cascade: true,
},
)
public inheritedSubspaceAllocations: SubspaceProductAllocationEntity[];
} }

View File

@ -2,9 +2,9 @@ import { AbstractEntity } from '@app/common/modules/abstract/entities/abstract.e
import { Column, Entity, ManyToOne, OneToMany } from 'typeorm'; import { Column, Entity, ManyToOne, OneToMany } from 'typeorm';
import { SubSpaceModelDto } from '../../dtos'; import { SubSpaceModelDto } from '../../dtos';
import { SpaceModelEntity } from '../space-model.entity'; import { SpaceModelEntity } from '../space-model.entity';
import { SubspaceEntity } from '@app/common/modules/space/entities';
import { TagModel } from '../tag-model.entity'; import { TagModel } from '../tag-model.entity';
import { SubspaceModelProductAllocationEntity } from './subspace-model-product-allocation.entity'; import { SubspaceModelProductAllocationEntity } from './subspace-model-product-allocation.entity';
import { SubspaceEntity } from '@app/common/modules/space/entities/subspace/subspace.entity';
@Entity({ name: 'subspace-model' }) @Entity({ name: 'subspace-model' })
export class SubspaceModelEntity extends AbstractEntity<SubSpaceModelDto> { export class SubspaceModelEntity extends AbstractEntity<SubSpaceModelDto> {

View File

@ -1,3 +1,4 @@
export * from './space.dto'; export * from './space.dto';
export * from './subspace.dto'; export * from './subspace.dto';
export * from './tag.dto'; export * from './tag.dto';
export * from './space-product-allocation.dto';

View File

@ -0,0 +1,24 @@
import { IsArray, IsNotEmpty, IsString, ValidateNested } from 'class-validator';
import { SpaceDto } from './space.dto';
import { Type } from 'class-transformer';
import { ProductDto } from '../../product/dtos';
import { NewTagDto } from '../../tag/dtos';
export class SpaceProductAllocationDto {
@IsString()
@IsNotEmpty()
public uuid: string;
@ValidateNested()
@Type(() => SpaceDto)
public space: SpaceDto;
@ValidateNested()
@Type(() => ProductDto)
product: ProductDto;
@IsArray()
@ValidateNested({ each: true })
@Type(() => NewTagDto)
allowedTags: NewTagDto[];
}

View File

@ -0,0 +1,24 @@
import { IsArray, IsNotEmpty, IsString, ValidateNested } from 'class-validator';
import { Type } from 'class-transformer';
import { ProductDto } from '../../product/dtos';
import { NewTagDto } from '../../tag/dtos';
import { SubspaceDto } from './subspace.dto';
export class SubspaceProductAllocationDto {
@IsString()
@IsNotEmpty()
public uuid: string;
@ValidateNested()
@Type(() => SubspaceDto)
public subspace: SubspaceDto;
@ValidateNested()
@Type(() => ProductDto)
product: ProductDto;
@IsArray()
@ValidateNested({ each: true })
@Type(() => NewTagDto)
allowedTags: NewTagDto[];
}

View File

@ -1,4 +0,0 @@
export * from './space.entity';
export * from './subspace';
export * from './space-link.entity';
export * from './tag.entity';

View File

@ -1,11 +1,13 @@
import { Entity, Column, ManyToOne, ManyToMany, JoinTable } from 'typeorm'; import { Entity, Column, ManyToOne, ManyToMany, JoinTable } from 'typeorm';
import { SpaceEntity } from './space.entity'; import { SpaceEntity } from './space.entity';
import { SpaceModelProductAllocationEntity } from '../../space-model'; import { SpaceModelProductAllocationEntity } from '../../space-model/entities/space-model-product-allocation.entity';
import { ProductEntity } from '../../product/entities'; import { ProductEntity } from '../../product/entities/product.entity';
import { NewTagEntity } from '../../tag'; import { NewTagEntity } from '../../tag/entities/tag.entity';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { SpaceProductAllocationDto } from '../dtos/space-product-allocation.dto';
@Entity({ name: 'space_product_allocation' }) @Entity({ name: 'space_product_allocation' })
export class SpaceProductAllocationEntity { export class SpaceProductAllocationEntity extends AbstractEntity<SpaceProductAllocationDto> {
@Column({ @Column({
type: 'uuid', type: 'uuid',
default: () => 'gen_random_uuid()', default: () => 'gen_random_uuid()',
@ -34,4 +36,9 @@ export class SpaceProductAllocationEntity {
@ManyToMany(() => NewTagEntity) @ManyToMany(() => NewTagEntity)
@JoinTable({ name: 'space_product_tags' }) @JoinTable({ name: 'space_product_tags' })
public allowedTags: NewTagEntity[]; public allowedTags: NewTagEntity[];
constructor(partial: Partial<SpaceProductAllocationEntity>) {
super();
Object.assign(this, partial);
}
} }

View File

@ -4,13 +4,13 @@ import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { UserSpaceEntity } from '../../user/entities'; import { UserSpaceEntity } from '../../user/entities';
import { DeviceEntity } from '../../device/entities'; import { DeviceEntity } from '../../device/entities';
import { CommunityEntity } from '../../community/entities'; import { CommunityEntity } from '../../community/entities';
import { SubspaceEntity } from './subspace';
import { SpaceLinkEntity } from './space-link.entity'; import { SpaceLinkEntity } from './space-link.entity';
import { SceneEntity } from '../../scene/entities'; import { SceneEntity } from '../../scene/entities';
import { SpaceModelEntity } from '../../space-model'; import { SpaceModelEntity } from '../../space-model';
import { InviteUserSpaceEntity } from '../../Invite-user/entities'; import { InviteUserSpaceEntity } from '../../Invite-user/entities';
import { TagEntity } from './tag.entity'; import { TagEntity } from './tag.entity';
import { SpaceProductAllocationEntity } from './space-product-allocation.entity'; import { SpaceProductAllocationEntity } from './space-product-allocation.entity';
import { SubspaceEntity } from './subspace/subspace.entity';
@Entity({ name: 'space' }) @Entity({ name: 'space' })
export class SpaceEntity extends AbstractEntity<SpaceDto> { export class SpaceEntity extends AbstractEntity<SpaceDto> {

View File

@ -1,2 +0,0 @@
export * from './subspace.entity';
export * from './subspace-product-allocation.entity';

View File

@ -8,12 +8,14 @@ import {
} from 'typeorm'; } from 'typeorm';
import { SubspaceEntity } from './subspace.entity'; import { SubspaceEntity } from './subspace.entity';
import { ProductEntity } from '@app/common/modules/product/entities'; import { ProductEntity } from '@app/common/modules/product/entities';
import { NewTagEntity } from '@app/common/modules/tag';
import { SubspaceModelProductAllocationEntity } from '@app/common/modules/space-model'; import { SubspaceModelProductAllocationEntity } from '@app/common/modules/space-model';
import { NewTagEntity } from '@app/common/modules/tag/entities/tag.entity';
import { AbstractEntity } from '@app/common/modules/abstract/entities/abstract.entity';
import { SubspaceProductAllocationDto } from '../../dtos/subspace-product-allocation.dto';
@Entity({ name: 'subspace_product_allocation' }) @Entity({ name: 'subspace_product_allocation' })
@Unique(['subspaceModel', 'product', 'allowedTags']) @Unique(['subspace', 'product'])
export class SubspaceProductAllocationEntity { export class SubspaceProductAllocationEntity extends AbstractEntity<SubspaceProductAllocationDto> {
@Column({ @Column({
type: 'uuid', type: 'uuid',
default: () => 'gen_random_uuid()', default: () => 'gen_random_uuid()',
@ -42,4 +44,9 @@ export class SubspaceProductAllocationEntity {
@ManyToMany(() => NewTagEntity) @ManyToMany(() => NewTagEntity)
@JoinTable({ name: 'subspace_product_tags' }) @JoinTable({ name: 'subspace_product_tags' })
public allowedTags: NewTagEntity[]; public allowedTags: NewTagEntity[];
constructor(partial: Partial<SubspaceProductAllocationEntity>) {
super();
Object.assign(this, partial);
}
} }

View File

@ -4,12 +4,12 @@ import { ProductEntity } from '../../product/entities';
import { TagDto } from '../dtos'; import { TagDto } from '../dtos';
import { TagModel } from '../../space-model/entities/tag-model.entity'; import { TagModel } from '../../space-model/entities/tag-model.entity';
import { SpaceEntity } from './space.entity'; import { SpaceEntity } from './space.entity';
import { SubspaceEntity } from './subspace';
import { DeviceEntity } from '../../device/entities'; import { DeviceEntity } from '../../device/entities';
import { SubspaceEntity } from './subspace/subspace.entity';
@Entity({ name: 'tag' }) @Entity({ name: 'tag' })
export class TagEntity extends AbstractEntity<TagDto> { export class TagEntity extends AbstractEntity<TagDto> {
@Column({ type: 'varchar', length: 255 }) @Column({ type: 'varchar', length: 255, nullable: true })
tag: string; tag: string;
@ManyToOne(() => TagModel, (model) => model.tags, { @ManyToOne(() => TagModel, (model) => model.tags, {

View File

@ -1,4 +1,3 @@
export * from './dtos'; export * from './dtos';
export * from './entities';
export * from './repositories'; export * from './repositories';
export * from './space.repository.module'; export * from './space.repository.module';

View File

@ -1,7 +1,9 @@
import { DataSource, Repository } from 'typeorm'; import { DataSource, Repository } from 'typeorm';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { SpaceEntity, SpaceLinkEntity, TagEntity } from '../entities';
import { InviteSpaceEntity } from '../entities/invite-space.entity'; import { InviteSpaceEntity } from '../entities/invite-space.entity';
import { SpaceLinkEntity } from '../entities/space-link.entity';
import { SpaceEntity } from '../entities/space.entity';
import { TagEntity } from '../entities/tag.entity';
@Injectable() @Injectable()
export class SpaceRepository extends Repository<SpaceEntity> { export class SpaceRepository extends Repository<SpaceEntity> {

View File

@ -1,6 +1,6 @@
import { DataSource, Repository } from 'typeorm'; import { DataSource, Repository } from 'typeorm';
import { SubspaceEntity } from '../entities';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { SubspaceEntity } from '../entities/subspace/subspace.entity';
@Injectable() @Injectable()
export class SubspaceRepository extends Repository<SubspaceEntity> { export class SubspaceRepository extends Repository<SubspaceEntity> {

View File

@ -1,7 +1,12 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { SpaceEntity, SubspaceEntity, TagEntity } from './entities';
import { InviteSpaceEntity } from './entities/invite-space.entity'; import { InviteSpaceEntity } from './entities/invite-space.entity';
import { SpaceProductAllocationEntity } from './entities/space-product-allocation.entity';
import { SpaceEntity } from './entities/space.entity';
import { SubspaceProductAllocationEntity } from './entities/subspace/subspace-product-allocation.entity';
import { SubspaceEntity } from './entities/subspace/subspace.entity';
import { TagEntity } from './entities/tag.entity';
@Module({ @Module({
providers: [], providers: [],
@ -13,6 +18,8 @@ import { InviteSpaceEntity } from './entities/invite-space.entity';
SubspaceEntity, SubspaceEntity,
TagEntity, TagEntity,
InviteSpaceEntity, InviteSpaceEntity,
SpaceProductAllocationEntity,
SubspaceProductAllocationEntity,
]), ]),
], ],
}) })

View File

@ -1,12 +1,20 @@
import { Entity, Column, ManyToOne, Unique, OneToMany } from 'typeorm'; import {
Entity,
Column,
ManyToOne,
Unique,
ManyToMany,
OneToMany,
} from 'typeorm';
import { ProductEntity } from '../../product/entities'; import { ProductEntity } from '../../product/entities';
import { ProjectEntity } from '../../project/entities'; import { ProjectEntity } from '../../project/entities';
import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { NewTagDto } from '../dtos/tag.dto'; import { NewTagDto } from '../dtos/tag.dto';
import { SpaceModelProductAllocationEntity } from '../../space-model/entities/space-model-product-allocation.entity'; import { SpaceModelProductAllocationEntity } from '../../space-model/entities/space-model-product-allocation.entity';
import { SubspaceProductAllocationEntity } from '../../space'; import { SubspaceModelProductAllocationEntity } from '../../space-model/entities/subspace-model/subspace-model-product-allocation.entity';
import { DeviceEntity } from '../../device/entities/device.entity';
@Entity({ name: 'tag' }) @Entity({ name: 'new_tag' })
@Unique(['name', 'project']) @Unique(['name', 'project'])
export class NewTagEntity extends AbstractEntity<NewTagDto> { export class NewTagEntity extends AbstractEntity<NewTagDto> {
@Column({ @Column({
@ -16,7 +24,11 @@ export class NewTagEntity extends AbstractEntity<NewTagDto> {
}) })
public uuid: string; public uuid: string;
@Column() @Column({
type: 'varchar',
length: 255,
nullable: true,
})
name: string; name: string;
@ManyToOne(() => ProductEntity, (product) => product.newTags, { @ManyToOne(() => ProductEntity, (product) => product.newTags, {
@ -31,17 +43,20 @@ export class NewTagEntity extends AbstractEntity<NewTagDto> {
}) })
public project: ProjectEntity; public project: ProjectEntity;
@OneToMany( @ManyToMany(
() => SpaceModelProductAllocationEntity, () => SpaceModelProductAllocationEntity,
(allocation) => allocation.allowedTags, (allocation) => allocation.allowedTags,
) )
public spaceModelAllocations: SpaceModelProductAllocationEntity[]; public spaceModelAllocations: SpaceModelProductAllocationEntity[];
@OneToMany( @ManyToMany(
() => SubspaceProductAllocationEntity, () => SubspaceModelProductAllocationEntity,
(allocation) => allocation.allowedTags, (allocation) => allocation.allowedTags,
) )
public subspaceAllocations: SubspaceProductAllocationEntity[]; public subspaceModelAllocations: SubspaceModelProductAllocationEntity[];
@OneToMany(() => DeviceEntity, (device) => device.tag)
public devices: DeviceEntity[];
constructor(partial: Partial<NewTagEntity>) { constructor(partial: Partial<NewTagEntity>) {
super(); super();

View File

@ -1,6 +1,6 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { NewTagEntity } from './entities'; import { NewTagEntity } from './entities/tag.entity';
@Module({ @Module({
providers: [], providers: [],

View File

@ -25,10 +25,10 @@ import { RegionEntity } from '../../region/entities';
import { TimeZoneEntity } from '../../timezone/entities'; import { TimeZoneEntity } from '../../timezone/entities';
import { OtpType } from '../../../../src/constants/otp-type.enum'; import { OtpType } from '../../../../src/constants/otp-type.enum';
import { RoleTypeEntity } from '../../role-type/entities'; import { RoleTypeEntity } from '../../role-type/entities';
import { SpaceEntity } from '../../space/entities';
import { VisitorPasswordEntity } from '../../visitor-password/entities'; import { VisitorPasswordEntity } from '../../visitor-password/entities';
import { InviteUserEntity } from '../../Invite-user/entities'; import { InviteUserEntity } from '../../Invite-user/entities';
import { ProjectEntity } from '../../project/entities'; import { ProjectEntity } from '../../project/entities';
import { SpaceEntity } from '../../space/entities/space.entity';
@Entity({ name: 'user' }) @Entity({ name: 'user' })
export class UserEntity extends AbstractEntity<UserDto> { export class UserEntity extends AbstractEntity<UserDto> {

View File

@ -48,7 +48,6 @@ import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status
import { DeviceStatuses } from '@app/common/constants/device-status.enum'; import { DeviceStatuses } from '@app/common/constants/device-status.enum';
import { CommonErrorCodes } from '@app/common/constants/error-codes.enum'; import { CommonErrorCodes } from '@app/common/constants/error-codes.enum';
import { BatteryStatus } from '@app/common/constants/battery-status.enum'; import { BatteryStatus } from '@app/common/constants/battery-status.enum';
import { SpaceEntity } from '@app/common/modules/space/entities';
import { SceneService } from 'src/scene/services'; import { SceneService } from 'src/scene/services';
import { AddAutomationDto } from 'src/automation/dtos'; import { AddAutomationDto } from 'src/automation/dtos';
import { TuyaService } from '@app/common/integrations/tuya/services/tuya.service'; import { TuyaService } from '@app/common/integrations/tuya/services/tuya.service';
@ -60,6 +59,7 @@ import { BaseResponseDto } from '@app/common/dto/base.response.dto';
import { SuccessResponseDto } from '@app/common/dto/success.response.dto'; import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
import { DeleteSceneFromSceneDeviceDto } from '../dtos/delete.device.dto'; import { DeleteSceneFromSceneDeviceDto } from '../dtos/delete.device.dto';
import { DeviceEntity } from '@app/common/modules/device/entities'; import { DeviceEntity } from '@app/common/modules/device/entities';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
@Injectable() @Injectable()
export class DeviceService { export class DeviceService {

View File

@ -20,7 +20,7 @@ import {
import { CheckEmailDto } from '../dtos/check-email.dto'; import { CheckEmailDto } from '../dtos/check-email.dto';
import { UserRepository } from '@app/common/modules/user/repositories'; import { UserRepository } from '@app/common/modules/user/repositories';
import { EmailService } from '@app/common/util/email.service'; import { EmailService } from '@app/common/util/email.service';
import { SpaceEntity, SpaceRepository } from '@app/common/modules/space'; import { SpaceRepository } from '@app/common/modules/space';
import { ActivateCodeDto } from '../dtos/active-code.dto'; import { ActivateCodeDto } from '../dtos/active-code.dto';
import { UserSpaceService } from 'src/users/services'; import { UserSpaceService } from 'src/users/services';
import { SpaceUserService } from 'src/space/services'; import { SpaceUserService } from 'src/space/services';
@ -30,6 +30,7 @@ import {
} from '../dtos/update.invite-user.dto'; } from '../dtos/update.invite-user.dto';
import { RoleTypeRepository } from '@app/common/modules/role-type/repositories'; import { RoleTypeRepository } from '@app/common/modules/role-type/repositories';
import { InviteUserEntity } from '@app/common/modules/Invite-user/entities'; import { InviteUserEntity } from '@app/common/modules/Invite-user/entities';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
@Injectable() @Injectable()
export class InviteUserService { export class InviteUserService {

View File

@ -1,6 +1,6 @@
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
import { PropogateUpdateSpaceModelCommand } from '../commands'; import { PropogateUpdateSpaceModelCommand } from '../commands';
import { SpaceEntity, SpaceRepository } from '@app/common/modules/space'; import { SpaceRepository } from '@app/common/modules/space';
import { SubspaceRepository } from '@app/common/modules/space/repositories/subspace.repository'; import { SubspaceRepository } from '@app/common/modules/space/repositories/subspace.repository';
import { import {
SpaceModelEntity, SpaceModelEntity,
@ -14,6 +14,7 @@ import { TagModelService } from '../services';
import { UpdatedSubspaceModelPayload } from '../interfaces'; import { UpdatedSubspaceModelPayload } from '../interfaces';
import { ModifyAction } from '@app/common/constants/modify-action.enum'; import { ModifyAction } from '@app/common/constants/modify-action.enum';
import { ModifySubspaceDto } from 'src/space/dtos'; import { ModifySubspaceDto } from 'src/space/dtos';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
@CommandHandler(PropogateUpdateSpaceModelCommand) @CommandHandler(PropogateUpdateSpaceModelCommand)
export class PropogateUpdateSpaceModelHandler export class PropogateUpdateSpaceModelHandler

View File

@ -1,4 +1,4 @@
import { SpaceEntity } from '@app/common/modules/space'; import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
export class DisableSpaceCommand { export class DisableSpaceCommand {
constructor( constructor(

View File

@ -1,4 +1,3 @@
import { SpaceEntity } from '@app/common/modules/space';
import { HttpException, HttpStatus } from '@nestjs/common'; import { HttpException, HttpStatus } from '@nestjs/common';
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
import { DeviceService } from 'src/device/services'; import { DeviceService } from 'src/device/services';
@ -11,6 +10,7 @@ import {
SpaceSceneService, SpaceSceneService,
} from '../services'; } from '../services';
import { TagService } from '../services/tag'; import { TagService } from '../services/tag';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
@CommandHandler(DisableSpaceCommand) @CommandHandler(DisableSpaceCommand)
export class DisableSpaceHandler export class DisableSpaceHandler

View File

@ -1,4 +1,4 @@
import { SubspaceEntity } from '@app/common/modules/space'; import { SubspaceEntity } from '@app/common/modules/space/entities/subspace/subspace.entity';
export interface ModifySubspacePayload { export interface ModifySubspacePayload {
addedSubspaces?: SubspaceEntity[]; addedSubspaces?: SubspaceEntity[];

View File

@ -1,4 +1,5 @@
import { SpaceEntity, SpaceLinkEntity } from '@app/common/modules/space'; import { SpaceLinkEntity } from '@app/common/modules/space/entities/space-link.entity';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
import { SpaceLinkRepository } from '@app/common/modules/space/repositories'; import { SpaceLinkRepository } from '@app/common/modules/space/repositories';
import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { QueryRunner } from 'typeorm'; import { QueryRunner } from 'typeorm';

View File

@ -5,9 +5,9 @@ import { SceneService } from '../../scene/services';
import { SuccessResponseDto } from '@app/common/dto/success.response.dto'; import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
import { GetSceneDto } from '../../scene/dtos'; import { GetSceneDto } from '../../scene/dtos';
import { ValidationService } from './space-validation.service'; import { ValidationService } from './space-validation.service';
import { SpaceEntity } from '@app/common/modules/space';
import { QueryRunner } from 'typeorm'; import { QueryRunner } from 'typeorm';
import { SceneEntity } from '@app/common/modules/scene/entities'; import { SceneEntity } from '@app/common/modules/scene/entities';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
@Injectable() @Injectable()
export class SpaceSceneService { export class SpaceSceneService {

View File

@ -1,4 +1,3 @@
import { SpaceEntity } from '@app/common/modules/space/entities';
import { SpaceRepository } from '@app/common/modules/space/repositories'; import { SpaceRepository } from '@app/common/modules/space/repositories';
import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { CommunityService } from '../../community/services'; import { CommunityService } from '../../community/services';
@ -10,6 +9,7 @@ import {
import { ProjectRepository } from '@app/common/modules/project/repositiories'; import { ProjectRepository } from '@app/common/modules/project/repositiories';
import { CommunityRepository } from '@app/common/modules/community/repositories'; import { CommunityRepository } from '@app/common/modules/community/repositories';
import { DeviceRepository } from '@app/common/modules/device/repositories'; import { DeviceRepository } from '@app/common/modules/device/repositories';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
@Injectable() @Injectable()
export class ValidationService { export class ValidationService {

View File

@ -18,7 +18,6 @@ import {
} from '../dtos'; } from '../dtos';
import { SuccessResponseDto } from '@app/common/dto/success.response.dto'; import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
import { BaseResponseDto } from '@app/common/dto/base.response.dto'; import { BaseResponseDto } from '@app/common/dto/base.response.dto';
import { SpaceEntity } from '@app/common/modules/space/entities';
import { generateRandomString } from '@app/common/helper/randomString'; import { generateRandomString } from '@app/common/helper/randomString';
import { SpaceLinkService } from './space-link'; import { SpaceLinkService } from './space-link';
import { SubSpaceService } from './subspace'; import { SubSpaceService } from './subspace';
@ -34,6 +33,7 @@ import { SpaceModelService } from 'src/space-model/services';
import { DisableSpaceCommand } from '../commands'; import { DisableSpaceCommand } from '../commands';
import { GetSpaceDto } from '../dtos/get.space.dto'; import { GetSpaceDto } from '../dtos/get.space.dto';
import { removeCircularReferences } from '@app/common/helper/removeCircularReferences'; import { removeCircularReferences } from '@app/common/helper/removeCircularReferences';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
@Injectable() @Injectable()
export class SpaceService { export class SpaceService {
constructor( constructor(

View File

@ -16,10 +16,7 @@ import {
import { PageResponse } from '@app/common/dto/pagination.response.dto'; import { PageResponse } from '@app/common/dto/pagination.response.dto';
import { SubspaceDto } from '@app/common/modules/space/dtos'; import { SubspaceDto } from '@app/common/modules/space/dtos';
import { In, QueryRunner } from 'typeorm'; import { In, QueryRunner } from 'typeorm';
import {
SpaceEntity,
SubspaceEntity,
} from '@app/common/modules/space/entities';
import { SubspaceModelEntity } from '@app/common/modules/space-model'; import { SubspaceModelEntity } from '@app/common/modules/space-model';
import { ValidationService } from '../space-validation.service'; import { ValidationService } from '../space-validation.service';
import { SubspaceRepository } from '@app/common/modules/space/repositories/subspace.repository'; import { SubspaceRepository } from '@app/common/modules/space/repositories/subspace.repository';
@ -27,6 +24,8 @@ import { TagService } from '../tag';
import { ModifyAction } from '@app/common/constants/modify-action.enum'; import { ModifyAction } from '@app/common/constants/modify-action.enum';
import { SubspaceDeviceService } from './subspace-device.service'; import { SubspaceDeviceService } from './subspace-device.service';
import { ModifyTagDto } from 'src/space/dtos/tag/modify-tag.dto'; import { ModifyTagDto } from 'src/space/dtos/tag/modify-tag.dto';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
import { SubspaceEntity } from '@app/common/modules/space/entities/subspace/subspace.entity';
@Injectable() @Injectable()
export class SubSpaceService { export class SubSpaceService {

View File

@ -1,11 +1,9 @@
import { ModifyAction } from '@app/common/constants/modify-action.enum'; import { ModifyAction } from '@app/common/constants/modify-action.enum';
import { import { TagRepository } from '@app/common/modules/space';
SpaceEntity,
SubspaceEntity,
TagEntity,
TagRepository,
} from '@app/common/modules/space';
import { TagModel } from '@app/common/modules/space-model'; import { TagModel } from '@app/common/modules/space-model';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
import { SubspaceEntity } from '@app/common/modules/space/entities/subspace/subspace.entity';
import { TagEntity } from '@app/common/modules/space/entities/tag.entity';
import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { ProductService } from 'src/product/services'; import { ProductService } from 'src/product/services';
import { CreateTagDto, ModifySubspaceDto } from 'src/space/dtos'; import { CreateTagDto, ModifySubspaceDto } from 'src/space/dtos';