snowballtools-base/packages/backend/src/entity/Project.ts
2024-10-16 15:37:09 +05:30

90 lines
1.9 KiB
TypeScript

import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
ManyToOne,
JoinColumn,
OneToMany,
DeleteDateColumn
} from 'typeorm';
import { User } from './User';
import { Organization } from './Organization';
import { ProjectMember } from './ProjectMember';
import { Deployment } from './Deployment';
@Entity()
export class Project {
@PrimaryGeneratedColumn('uuid')
id!: string;
@ManyToOne(() => User)
@JoinColumn({ name: 'ownerId' })
owner!: User;
@Column({ nullable: false })
ownerId!: string;
@ManyToOne(() => Organization, { nullable: true })
@JoinColumn({ name: 'organizationId' })
organization!: Organization | null;
@Column('varchar')
organizationId!: string;
@Column('varchar')
name!: string;
@Column('varchar')
repository!: string;
@Column('varchar', { length: 255, default: 'main' })
prodBranch!: string;
@Column('text', { default: '' })
description!: string;
@Column('varchar', { nullable: true })
auctionId?: string | null;
@Column({ type: 'simple-array', nullable: true })
deployerLrn!: string[] | null;
// TODO: Compute template & framework in import repository
@Column('varchar', { nullable: true })
template!: string | null;
@Column('varchar', { nullable: true })
framework!: string | null;
@Column({
type: 'simple-array'
})
webhooks!: string[];
@Column('varchar')
icon!: string;
@Column('varchar')
subDomain!: string;
@CreateDateColumn()
createdAt!: Date;
@UpdateDateColumn()
updatedAt!: Date;
@DeleteDateColumn()
deletedAt!: Date | null;
@OneToMany(() => Deployment, (deployment) => deployment.project)
deployments!: Deployment[];
@OneToMany(() => ProjectMember, (projectMember) => projectMember.project, {
cascade: ['soft-remove']
})
projectMembers!: ProjectMember[];
}