Aller au contenu principal

Plugin Entity Registration

Register custom database entities from plugins.

Dynamic Entity Registration

Plugins can add entities to the Gauzy schema without modifying core code:

import { TypeOrmModule } from "@nestjs/typeorm";
import { MikroOrmModule } from "@mikro-orm/nestjs";

@Module({
imports: [
TypeOrmModule.forFeature([MyPluginEntity]),
MikroOrmModule.forFeature([MyPluginEntity]),
],
providers: [MyPluginService],
})
export class MyPluginModule {}

Defining Plugin Entities

import { MultiORMEntity, MultiORMColumn, MultiORMManyToOne } from "@gauzy/core";
import { TenantOrganizationBaseEntity } from "@gauzy/core";

@MultiORMEntity("my_plugin_data")
export class MyPluginEntity extends TenantOrganizationBaseEntity {
@MultiORMColumn()
name: string;

@MultiORMColumn({ nullable: true })
description?: string;

@MultiORMManyToOne(() => Employee)
employee?: Employee;

@MultiORMColumn({ nullable: true })
employeeId?: string;
}

Migration for Plugin Entities

Generate a migration for the new entity:

yarn typeorm migration:generate -n AddMyPluginTable

This creates:

export class AddMyPluginTable1709635260000 implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
CREATE TABLE "my_plugin_data" (
"id" uuid NOT NULL DEFAULT uuid_generate_v4(),
"tenantId" uuid NOT NULL,
"organizationId" uuid NOT NULL,
"name" varchar NOT NULL,
"description" varchar,
"employeeId" uuid,
PRIMARY KEY ("id")
)
`);
}

async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE "my_plugin_data"`);
}
}