🏗️ Architecture

Entity Inheritance Hierarchy

Understanding the base class hierarchy for all database entities.

Inheritance Tree

Diagram; its source is available below
Diagram source
classDiagram
    class BaseEntity {
        +id: UUID
        +createdAt: Date
        +updatedAt: Date
    }

    class TenantBaseEntity {
        +tenantId: UUID
        +tenant: Tenant
    }

    class TenantOrganizationBaseEntity {
        +organizationId: UUID
        +organization: Organization
    }

    class TranslationBase {
        +languageCode: string
    }

    BaseEntity <|-- TenantBaseEntity
    TenantBaseEntity <|-- TenantOrganizationBaseEntity
    BaseEntity <|-- TranslationBase

BaseEntity

The root class for all entities:

export abstract class BaseEntity {
  @PrimaryGeneratedColumn("uuid")
  id: string;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;

  @Column({ nullable: true })
  isActive?: boolean;

  @Column({ nullable: true })
  isArchived?: boolean;

  @DeleteDateColumn()
  deletedAt?: Date;

  @Column({ nullable: true })
  archivedAt?: Date;
}

TenantBaseEntity

Adds tenant scoping:

export abstract class TenantBaseEntity extends BaseEntity {
  @Column({ nullable: true })
  tenantId: string;

  @ManyToOne(() => Tenant)
  tenant?: Tenant;
}

Usage: Entities scoped to a tenant but not organization-specific (e.g., Role, User settings).

TenantOrganizationBaseEntity

Adds organization scoping:

export abstract class TenantOrganizationBaseEntity extends TenantBaseEntity {
  @Column({ nullable: true })
  organizationId: string;

  @ManyToOne(() => Organization)
  organization?: Organization;
}

Usage: Most business entities (Task, Employee, Invoice, etc.).

TranslationBase

For multi-language content:

export abstract class TranslationBase extends BaseEntity {
  @Column()
  languageCode: string;
}

Usage: ProductTranslation, ProductCategoryTranslation, etc.

Which Base Class to Use

ScenarioBase Class
System-level entityBaseEntity
Tenant-scopedTenantBaseEntity
Organization-scoped (most)TenantOrganizationBaseEntity
Translatable contentTranslationBase

Edit this page

Copyright © 2023-Present Ever Co. LTD.Docs by Sourcey