import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, Index, ManyToOne, JoinColumn, } from 'typeorm'; import { TenantPlan } from './tenant-plan.entity'; export enum TenantStatus { TRIAL = 'trial', ACTIVE = 'active', SUSPENDED = 'suspended', CANCELLED = 'cancelled', } @Entity('tenants', { schema: 'auth' }) export class Tenant { @PrimaryGeneratedColumn('uuid') id: string; @Column({ length: 255 }) name: string; @Column({ length: 100, unique: true }) @Index() slug: string; @Column('uuid') plan_id: string; @ManyToOne(() => TenantPlan) @JoinColumn({ name: 'plan_id' }) plan: TenantPlan; @Column({ type: 'enum', enum: TenantStatus, default: TenantStatus.TRIAL, }) status: TenantStatus; @Column({ length: 500, nullable: true }) logo_url: string | null; @Column({ type: 'jsonb', nullable: true }) settings: Record | null; @Column({ type: 'date', nullable: true }) trial_ends_at: Date | null; @Column({ type: 'date', nullable: true }) billing_cycle_start: Date | null; @CreateDateColumn({ type: 'timestamptz' }) created_at: Date; @UpdateDateColumn({ type: 'timestamptz' }) updated_at: Date; @DeleteDateColumn({ type: 'timestamptz' }) deleted_at: Date | null; }