platform-marketing-content-.../src/modules/tenants/entities/tenant.entity.ts
2026-01-04 07:19:31 -06:00

68 lines
1.3 KiB
TypeScript

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<string, any> | 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;
}