diff --git a/libs/common/src/database/database.module.ts b/libs/common/src/database/database.module.ts index 90b287a..3681bed 100644 --- a/libs/common/src/database/database.module.ts +++ b/libs/common/src/database/database.module.ts @@ -34,6 +34,8 @@ import { SpaceProductItemModelEntity, SpaceProductModelEntity, SubspaceModelEntity, + SubspaceProductItemModelEntity, + SubspaceProductModelEntity, } from '../modules/space-model/entities'; @Module({ imports: [ @@ -81,6 +83,8 @@ import { SubspaceModelEntity, SpaceProductEntity, SpaceProductItemEntity, + SubspaceProductModelEntity, + SubspaceProductItemModelEntity, ], namingStrategy: new SnakeNamingStrategy(), synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))), diff --git a/libs/common/src/modules/product/entities/product.entity.ts b/libs/common/src/modules/product/entities/product.entity.ts index 7b25470..926d179 100644 --- a/libs/common/src/modules/product/entities/product.entity.ts +++ b/libs/common/src/modules/product/entities/product.entity.ts @@ -4,6 +4,7 @@ import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { DeviceEntity } from '../../device/entities'; import { SpaceProductEntity } from '../../space/entities/space-product.entity'; import { SpaceProductModelEntity } from '../../space-model/entities'; +import { SubspaceProductModelEntity } from '../../space-model/entities/subspace-model/subspace-product-model.entity'; @Entity({ name: 'product' }) export class ProductEntity extends AbstractEntity { @@ -37,6 +38,12 @@ export class ProductEntity extends AbstractEntity { ) spaceProductModels: SpaceProductModelEntity[]; + @OneToMany( + () => SubspaceProductModelEntity, + (subspaceProductModel) => subspaceProductModel.product, + ) + subpaceProductModels: SubspaceProductModelEntity[]; + @OneToMany( () => DeviceEntity, (devicesProductEntity) => devicesProductEntity.productDevice, diff --git a/libs/common/src/modules/space-model/entities/space-model.entity.ts b/libs/common/src/modules/space-model/entities/space-model.entity.ts index c340b8b..591d04f 100644 --- a/libs/common/src/modules/space-model/entities/space-model.entity.ts +++ b/libs/common/src/modules/space-model/entities/space-model.entity.ts @@ -49,7 +49,6 @@ export class SpaceModelEntity extends AbstractEntity { () => SpaceProductModelEntity, (productModel) => productModel.spaceModel, { - cascade: true, nullable: true, }, ) diff --git a/libs/common/src/modules/space-model/entities/subspace-model/index.ts b/libs/common/src/modules/space-model/entities/subspace-model/index.ts index cd29d67..e39403f 100644 --- a/libs/common/src/modules/space-model/entities/subspace-model/index.ts +++ b/libs/common/src/modules/space-model/entities/subspace-model/index.ts @@ -1 +1,3 @@ export * from './subspace-model.entity'; +export * from './subspace-product-item-model.entity'; +export * from './subspace-product-model.entity'; diff --git a/libs/common/src/modules/space-model/entities/subspace-model/subspace-model.entity.ts b/libs/common/src/modules/space-model/entities/subspace-model/subspace-model.entity.ts index a8a3595..2d1a170 100644 --- a/libs/common/src/modules/space-model/entities/subspace-model/subspace-model.entity.ts +++ b/libs/common/src/modules/space-model/entities/subspace-model/subspace-model.entity.ts @@ -3,6 +3,7 @@ import { Column, Entity, ManyToOne, OneToMany, Unique } from 'typeorm'; import { SubSpaceModelDto } from '../../dtos'; import { SpaceModelEntity } from '../space-model.entity'; import { SubspaceEntity } from '@app/common/modules/space/entities'; +import { SubspaceProductModelEntity } from './subspace-product-model.entity'; @Entity({ name: 'subspace-model' }) @Unique(['subspaceName', 'spaceModel']) @@ -33,4 +34,13 @@ export class SubspaceModelEntity extends AbstractEntity { cascade: true, }) public spaces: SubspaceEntity[]; + + @OneToMany( + () => SubspaceProductModelEntity, + (productModel) => productModel.subspaceModel, + { + nullable: true, + }, + ) + public subspaceProductModels: SubspaceProductModelEntity[]; } diff --git a/libs/common/src/modules/space-model/entities/subspace-model/subspace-product-item-model.entity.ts b/libs/common/src/modules/space-model/entities/subspace-model/subspace-product-item-model.entity.ts new file mode 100644 index 0000000..decd0a7 --- /dev/null +++ b/libs/common/src/modules/space-model/entities/subspace-model/subspace-product-item-model.entity.ts @@ -0,0 +1,21 @@ +import { AbstractEntity } from '@app/common/modules/abstract/entities/abstract.entity'; +import { Entity, Column, ManyToOne } from 'typeorm'; +import { SubspaceProductItemModelDto } from '../../dtos'; +import { SubspaceProductModelEntity } from './subspace-product-model.entity'; + +@Entity({ name: 'subspace-product-item-model' }) +export class SubspaceProductItemModelEntity extends AbstractEntity { + @Column({ + nullable: false, + }) + public tag: string; + + @ManyToOne( + () => SubspaceProductModelEntity, + (subspaceProductModel) => subspaceProductModel.items, + { + nullable: false, + }, + ) + public subspaceProductModel: SubspaceProductModelEntity; +} diff --git a/libs/common/src/modules/space-model/entities/subspace-model/subspace-product-model.entity.ts b/libs/common/src/modules/space-model/entities/subspace-model/subspace-product-model.entity.ts new file mode 100644 index 0000000..3a5ab1f --- /dev/null +++ b/libs/common/src/modules/space-model/entities/subspace-model/subspace-product-model.entity.ts @@ -0,0 +1,38 @@ +import { Entity, Column, ManyToOne, OneToMany } from 'typeorm'; +import { SubpaceProductModelDto } from '../../dtos'; +import { AbstractEntity } from '@app/common/modules/abstract/entities/abstract.entity'; +import { SubspaceModelEntity } from './subspace-model.entity'; +import { ProductEntity } from '@app/common/modules/product/entities'; +import { SubspaceProductItemModelEntity } from './subspace-product-item-model.entity'; + +@Entity({ name: 'subspace-product-model' }) +export class SubspaceProductModelEntity extends AbstractEntity { + @Column({ + nullable: false, + type: 'int', + }) + productCount: number; + + @ManyToOne( + () => SubspaceModelEntity, + (spaceModel) => spaceModel.subspaceProductModels, + { + nullable: false, + }, + ) + public subspaceModel: SubspaceModelEntity; + + @ManyToOne(() => ProductEntity, (product) => product.subpaceProductModels, { + nullable: false, + }) + public product: ProductEntity; + + @OneToMany( + () => SubspaceProductItemModelEntity, + (item) => item.subspaceProductModel, + { + cascade: true, + }, + ) + public items: SubspaceProductItemModelEntity[]; +}