演示

内置实体

来自 @quan-erp/shared-backend-core 的核心实体。用户、分支、合作方、货币、媒体与平台配置优先复用它们,并从插件表中关联,而不是重新实现。

优先使用内置

在为用户、分支、合作方、货币、标签、通知或媒体新建表之前,先从 shared-backend-core 导入对应实体(及其服务)。仅在领域特有数据时再定义自己的表。

  • 从 @quan-erp/shared-backend-core 导入实体
  • 所有实体继承 BaseEntity
  • 用 ManyToOne + JoinColumn 关联;关系类型使用 InstanceType<typeof EntityName>

领域

  • BaseEntity — 创建/更新/软删除/版本列
  • Identity — UserEntity、RoleEntity、BranchEntity
  • Partner — PartnerEntity 与收货地址
  • Currency — CurrencyEntity、CurrencyExchangeRateEnity
  • Units — UnitCategoryEntity、UnitEntity、换算
  • Operations — NotifcationEntity、AuditLogEntity、TagEntity
  • Config — SettingEntity、EnvEntity、DeveloperConfigEntity
  • Plugins — PluginEntity、PluginRouteEntity、DataSeedHistoryEntity
  • Files — FileEntity

从插件实体关联

用 TypeORM 关系引用核心实体。关系类型建议用 InstanceType<typeof …>,避免循环依赖问题。

TSXjoin User + Branch
1import { 2 BaseEntity, 3 BranchEntity, 4 UserEntity, 5} from "@quan-erp/shared-backend-core"; 6import { 7 Column, 8 Entity, 9 JoinColumn, 10 ManyToOne, 11 PrimaryGeneratedColumn, 12} from "typeorm"; 13import metadata from "../../../../module.metadata.json" with { type: "json" }; 14 15@Entity(`${metadata.name}_order`) 16export class OrderEntity extends BaseEntity { 17 @PrimaryGeneratedColumn() 18 id: number; 19 20 @ManyToOne(() => UserEntity) 21 @JoinColumn({ name: "userId" }) 22 user: InstanceType<typeof UserEntity>; 23 24 @Column() 25 userId: number; 26 27 @ManyToOne(() => BranchEntity) 28 @JoinColumn({ name: "branchId" }) 29 branch: InstanceType<typeof BranchEntity>; 30 31 @Column() 32 branchId: number; 33}

你的插件表

需要领域表时,定义 TypeORM 实体(以 metadata.name 为前缀,继承 BaseEntity),在模块中以 plugin: "default" 注册,并用迁移演进 schema。详见 Database 与 Migrations。