import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; import { stack_delete_audit } from 'src/schema/functions'; import { AssetTable } from 'src/schema/tables/asset.table'; import { UserTable } from 'src/schema/tables/user.table'; import { AfterDeleteTrigger, CreateDateColumn, ForeignKeyColumn, Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from 'src/sql-tools'; @Table('stack') @UpdatedAtTrigger('stack_updatedAt') @AfterDeleteTrigger({ scope: 'statement', function: stack_delete_audit, referencingOldTableAs: 'old', when: 'pg_trigger_depth() = 0', }) export class StackTable { @PrimaryGeneratedColumn() id!: Generated; @CreateDateColumn() createdAt!: Generated; @UpdateDateColumn() updatedAt!: Generated; @UpdateIdColumn() updateId!: Generated; //TODO: Add constraint to ensure primary asset exists in the assets array @ForeignKeyColumn(() => AssetTable, { nullable: false, unique: true }) primaryAssetId!: string; @ForeignKeyColumn(() => UserTable, { onDelete: 'CASCADE', onUpdate: 'CASCADE' }) ownerId!: string; }