import { Entity, Column, OneToMany, ManyToOne, JoinColumn, Unique, } from 'typeorm'; import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { SpaceModelDto } from '../dtos'; import { SubspaceModelEntity } from './subspace-model.entity'; import { SpaceProductModelEntity } from './space-product-model.entity'; import { ProjectEntity } from '../../project/entities'; import { SpaceEntity } from '../../space/entities'; @Entity({ name: 'space-model' }) @Unique(['modelName', 'project']) export class SpaceModelEntity extends AbstractEntity { @Column({ type: 'uuid', default: () => 'gen_random_uuid()', nullable: false, }) public uuid: string; @Column({ nullable: false, }) public modelName: string; @ManyToOne(() => ProjectEntity, (project) => project.spaceModels, { nullable: false, onDelete: 'CASCADE', }) @JoinColumn({ name: 'project_uuid' }) public project: ProjectEntity; @OneToMany( () => SubspaceModelEntity, (subspaceModel) => subspaceModel.spaceModel, { cascade: true, nullable: true, }, ) public subspaceModels: SubspaceModelEntity[]; @OneToMany( () => SpaceProductModelEntity, (productModel) => productModel.spaceModel, { cascade: true, nullable: true, }, ) public spaceProductModels: SpaceProductModelEntity[]; @OneToMany(() => SpaceEntity, (space) => space.spaceModel, { cascade: true, }) public spaces: SpaceEntity[]; }