Add indices on frequent queries (#12401)
Fixes #12165 Also changed the index naming convention because some were not properly name and would have caused conflicts in the long run
This commit is contained in:
@ -0,0 +1,19 @@
|
|||||||
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||||
|
|
||||||
|
export class AddUserWorkspaceRoleCompositeIndex1748843737248
|
||||||
|
implements MigrationInterface
|
||||||
|
{
|
||||||
|
name = 'AddUserWorkspaceRoleCompositeIndex1748843737248';
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_USER_WORKSPACE_ROLE_USER_WORKSPACE_ID_WORKSPACE_ID" ON "core"."userWorkspaceRole" ("userWorkspaceId", "workspaceId") `,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_USER_WORKSPACE_ROLE_USER_WORKSPACE_ID_WORKSPACE_ID"`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||||
|
|
||||||
|
export class AddIndexMetadataWorkspaceObjectCompositeIndex1748843862307
|
||||||
|
implements MigrationInterface
|
||||||
|
{
|
||||||
|
name = 'AddIndexMetadataWorkspaceObjectCompositeIndex1748843862307';
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_INDEX_METADATA_WORKSPACE_ID_OBJECT_METADATA_ID" ON "core"."indexMetadata" ("workspaceId", "objectMetadataId") `,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_INDEX_METADATA_WORKSPACE_ID_OBJECT_METADATA_ID"`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||||
|
|
||||||
|
export class AddSoftDeleteIndexes1748844710107 implements MigrationInterface {
|
||||||
|
name = 'AddSoftDeleteIndexes1748844710107';
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_USER_WORKSPACE_WORKSPACE_ID" ON "core"."userWorkspace" ("workspaceId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_USER_WORKSPACE_USER_ID" ON "core"."userWorkspace" ("userId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_USER_WORKSPACE_ID_DELETED_AT" ON "core"."userWorkspace" ("id", "deletedAt") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_USER_ID_DELETED_AT" ON "core"."user" ("id", "deletedAt") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_WORKSPACE_ID_DELETED_AT" ON "core"."workspace" ("id", "deletedAt") `,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(`DROP INDEX "core"."IDX_WORKSPACE_ID_DELETED_AT"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "core"."IDX_USER_ID_DELETED_AT"`);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_USER_WORKSPACE_ID_DELETED_AT"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(`DROP INDEX "core"."IDX_USER_WORKSPACE_USER_ID"`);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_USER_WORKSPACE_WORKSPACE_ID"`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,169 @@
|
|||||||
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||||
|
|
||||||
|
export class FixMetadataIndexes1748846032709 implements MigrationInterface {
|
||||||
|
name = 'FixMetadataIndexes1748846032709';
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(`DROP INDEX "core"."IndexOnFieldMetadataId"`);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IndexOnRelationTargetObjectMetadataId"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IndexOnRelationTargetFieldMetadataId"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(`DROP INDEX "core"."IndexOnObjectMetadataId"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "core"."IndexOnWorkspaceId"`);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."indexMetadata" DROP CONSTRAINT "IndexOnNameAndWorkspaceIdAndObjectMetadataUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."fieldMetadata" DROP CONSTRAINT "IndexOnNameObjectMetadataIdAndWorkspaceIdUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectMetadata" DROP CONSTRAINT "IndexOnNamePluralAndWorkspaceIdUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectMetadata" DROP CONSTRAINT "IndexOnNameSingularAndWorkspaceIdUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectPermission" DROP CONSTRAINT "IndexOnObjectPermissionUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."userWorkspaceRole" DROP CONSTRAINT "IndexOnUserWorkspaceRoleUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."role" DROP CONSTRAINT "IndexOnRoleUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."settingPermission" DROP CONSTRAINT "IndexOnSettingPermissionUnique"`,
|
||||||
|
);
|
||||||
|
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_INDEX_FIELD_METADATA_FIELD_METADATA_ID" ON "core"."indexFieldMetadata" ("fieldMetadataId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_FIELD_METADATA_OBJECT_METADATA_ID" ON "core"."fieldMetadata" ("objectMetadataId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_FIELD_METADATA_WORKSPACE_ID" ON "core"."fieldMetadata" ("workspaceId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_FIELD_METADATA_OBJECT_METADATA_ID_WORKSPACE_ID" ON "core"."fieldMetadata" ("objectMetadataId", "workspaceId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_FIELD_METADATA_RELATION_TARGET_OBJECT_METADATA_ID" ON "core"."fieldMetadata" ("relationTargetObjectMetadataId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IDX_FIELD_METADATA_RELATION_TARGET_FIELD_METADATA_ID" ON "core"."fieldMetadata" ("relationTargetFieldMetadataId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."indexMetadata" ADD CONSTRAINT "IDX_INDEX_METADATA_NAME_WORKSPACE_ID_OBJECT_METADATA_ID_UNIQUE" UNIQUE ("name", "workspaceId", "objectMetadataId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."fieldMetadata" ADD CONSTRAINT "IDX_FIELD_METADATA_NAME_OBJECT_METADATA_ID_WORKSPACE_ID_UNIQUE" UNIQUE ("name", "objectMetadataId", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectMetadata" ADD CONSTRAINT "IDX_OBJECT_METADATA_NAME_PLURAL_WORKSPACE_ID_UNIQUE" UNIQUE ("namePlural", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectMetadata" ADD CONSTRAINT "IDX_OBJECT_METADATA_NAME_SINGULAR_WORKSPACE_ID_UNIQUE" UNIQUE ("nameSingular", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectPermission" ADD CONSTRAINT "IDX_OBJECT_PERMISSION_OBJECT_METADATA_ID_ROLE_ID_UNIQUE" UNIQUE ("objectMetadataId", "roleId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."userWorkspaceRole" ADD CONSTRAINT "IDX_USER_WORKSPACE_ROLE_USER_WORKSPACE_ID_ROLE_ID_UNIQUE" UNIQUE ("userWorkspaceId", "roleId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."role" ADD CONSTRAINT "IDX_ROLE_LABEL_WORKSPACE_ID_UNIQUE" UNIQUE ("label", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."settingPermission" ADD CONSTRAINT "IDX_SETTING_PERMISSION_SETTING_ROLE_ID_UNIQUE" UNIQUE ("setting", "roleId")`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."settingPermission" DROP CONSTRAINT "IDX_SETTING_PERMISSION_SETTING_ROLE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."role" DROP CONSTRAINT "IDX_ROLE_LABEL_WORKSPACE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."userWorkspaceRole" DROP CONSTRAINT "IDX_USER_WORKSPACE_ROLE_USER_WORKSPACE_ID_ROLE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectPermission" DROP CONSTRAINT "IDX_OBJECT_PERMISSION_OBJECT_METADATA_ID_ROLE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectMetadata" DROP CONSTRAINT "IDX_OBJECT_METADATA_NAME_SINGULAR_WORKSPACE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectMetadata" DROP CONSTRAINT "IDX_OBJECT_METADATA_NAME_PLURAL_WORKSPACE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."fieldMetadata" DROP CONSTRAINT "IDX_FIELD_METADATA_NAME_OBJECT_METADATA_ID_WORKSPACE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."indexMetadata" DROP CONSTRAINT "IDX_INDEX_METADATA_NAME_WORKSPACE_ID_OBJECT_METADATA_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_FIELD_METADATA_RELATION_TARGET_FIELD_METADATA_ID"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_FIELD_METADATA_RELATION_TARGET_OBJECT_METADATA_ID"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_FIELD_METADATA_OBJECT_METADATA_ID_WORKSPACE_ID"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_FIELD_METADATA_WORKSPACE_ID"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_FIELD_METADATA_OBJECT_METADATA_ID"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_INDEX_FIELD_METADATA_FIELD_METADATA_ID"`,
|
||||||
|
);
|
||||||
|
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."settingPermission" ADD CONSTRAINT "IndexOnSettingPermissionUnique" UNIQUE ("roleId", "setting")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."role" ADD CONSTRAINT "IndexOnRoleUnique" UNIQUE ("label", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."userWorkspaceRole" ADD CONSTRAINT "IndexOnUserWorkspaceRoleUnique" UNIQUE ("roleId", "userWorkspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectPermission" ADD CONSTRAINT "IndexOnObjectPermissionUnique" UNIQUE ("roleId", "objectMetadataId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectMetadata" ADD CONSTRAINT "IndexOnNameSingularAndWorkspaceIdUnique" UNIQUE ("nameSingular", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."objectMetadata" ADD CONSTRAINT "IndexOnNamePluralAndWorkspaceIdUnique" UNIQUE ("namePlural", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."fieldMetadata" ADD CONSTRAINT "IndexOnNameObjectMetadataIdAndWorkspaceIdUnique" UNIQUE ("objectMetadataId", "name", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."indexMetadata" ADD CONSTRAINT "IndexOnNameAndWorkspaceIdAndObjectMetadataUnique" UNIQUE ("name", "workspaceId", "objectMetadataId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IndexOnWorkspaceId" ON "core"."fieldMetadata" ("workspaceId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IndexOnObjectMetadataId" ON "core"."fieldMetadata" ("objectMetadataId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IndexOnRelationTargetFieldMetadataId" ON "core"."fieldMetadata" ("relationTargetFieldMetadataId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IndexOnRelationTargetObjectMetadataId" ON "core"."fieldMetadata" ("relationTargetObjectMetadataId") `,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE INDEX "IndexOnFieldMetadataId" ON "core"."indexFieldMetadata" ("fieldMetadataId") `,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||||
|
|
||||||
|
export class FixCoreIndexes1748846118238 implements MigrationInterface {
|
||||||
|
name = 'FixCoreIndexes1748846118238';
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IndexOnKeyUserIdAndNullWorkspaceIdUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IndexOnKeyWorkspaceIdAndNullUserIdUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."keyValuePair" DROP CONSTRAINT "IndexOnKeyUserIdWorkspaceIdUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."approvedAccessDomain" DROP CONSTRAINT "IndexOnDomainAndWorkspaceId"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."featureFlag" DROP CONSTRAINT "IndexOnKeyAndWorkspaceIdUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE UNIQUE INDEX "IDX_KEY_VALUE_PAIR_KEY_USER_ID_NULL_WORKSPACE_ID_UNIQUE" ON "core"."keyValuePair" ("key", "userId") WHERE "workspaceId" is NULL`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE UNIQUE INDEX "IDX_KEY_VALUE_PAIR_KEY_WORKSPACE_ID_NULL_USER_ID_UNIQUE" ON "core"."keyValuePair" ("key", "workspaceId") WHERE "userId" is NULL`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."keyValuePair" ADD CONSTRAINT "IDX_KEY_VALUE_PAIR_KEY_USER_ID_WORKSPACE_ID_UNIQUE" UNIQUE ("key", "userId", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."approvedAccessDomain" ADD CONSTRAINT "IDX_APPROVED_ACCESS_DOMAIN_DOMAIN_WORKSPACE_ID_UNIQUE" UNIQUE ("domain", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."featureFlag" ADD CONSTRAINT "IDX_FEATURE_FLAG_KEY_WORKSPACE_ID_UNIQUE" UNIQUE ("key", "workspaceId")`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."featureFlag" DROP CONSTRAINT "IDX_FEATURE_FLAG_KEY_WORKSPACE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."approvedAccessDomain" DROP CONSTRAINT "IDX_APPROVED_ACCESS_DOMAIN_DOMAIN_WORKSPACE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."keyValuePair" DROP CONSTRAINT "IDX_KEY_VALUE_PAIR_KEY_USER_ID_WORKSPACE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_KEY_VALUE_PAIR_KEY_WORKSPACE_ID_NULL_USER_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`DROP INDEX "core"."IDX_KEY_VALUE_PAIR_KEY_USER_ID_NULL_WORKSPACE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."featureFlag" ADD CONSTRAINT "IndexOnKeyAndWorkspaceIdUnique" UNIQUE ("key", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."approvedAccessDomain" ADD CONSTRAINT "IndexOnDomainAndWorkspaceId" UNIQUE ("domain", "workspaceId")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."keyValuePair" ADD CONSTRAINT "IndexOnKeyUserIdWorkspaceIdUnique" UNIQUE ("userId", "workspaceId", "key")`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE UNIQUE INDEX "IndexOnKeyWorkspaceIdAndNullUserIdUnique" ON "core"."keyValuePair" ("workspaceId", "key") WHERE ("userId" IS NULL)`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE UNIQUE INDEX "IndexOnKeyUserIdAndNullWorkspaceIdUnique" ON "core"."keyValuePair" ("userId", "key") WHERE ("workspaceId" IS NULL)`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||||
|
|
||||||
|
export class FixCoreIndexes21748849487789 implements MigrationInterface {
|
||||||
|
name = 'FixCoreIndexes21748849487789';
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."userWorkspace" DROP CONSTRAINT "IndexOnUserIdAndWorkspaceIdUnique"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."userWorkspace" ADD CONSTRAINT "IDX_USER_WORKSPACE_USER_ID_WORKSPACE_ID_UNIQUE" UNIQUE ("userId", "workspaceId")`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."userWorkspace" DROP CONSTRAINT "IDX_USER_WORKSPACE_USER_ID_WORKSPACE_ID_UNIQUE"`,
|
||||||
|
);
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "core"."userWorkspace" ADD CONSTRAINT "IndexOnUserIdAndWorkspaceIdUnique" UNIQUE ("userId", "workspaceId")`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -7,8 +7,8 @@ import {
|
|||||||
JoinColumn,
|
JoinColumn,
|
||||||
ManyToOne,
|
ManyToOne,
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
UpdateDateColumn,
|
|
||||||
Unique,
|
Unique,
|
||||||
|
UpdateDateColumn,
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
|
|
||||||
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
|
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
|
||||||
@ -17,7 +17,10 @@ import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
|||||||
|
|
||||||
@Entity({ name: 'approvedAccessDomain', schema: 'core' })
|
@Entity({ name: 'approvedAccessDomain', schema: 'core' })
|
||||||
@ObjectType()
|
@ObjectType()
|
||||||
@Unique('IndexOnDomainAndWorkspaceId', ['domain', 'workspaceId'])
|
@Unique('IDX_APPROVED_ACCESS_DOMAIN_DOMAIN_WORKSPACE_ID_UNIQUE', [
|
||||||
|
'domain',
|
||||||
|
'workspaceId',
|
||||||
|
])
|
||||||
export class ApprovedAccessDomain {
|
export class ApprovedAccessDomain {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@ -20,7 +20,10 @@ import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billin
|
|||||||
import { BillingEntitlementKey } from 'src/engine/core-modules/billing/enums/billing-entitlement-key.enum';
|
import { BillingEntitlementKey } from 'src/engine/core-modules/billing/enums/billing-entitlement-key.enum';
|
||||||
@Entity({ name: 'billingEntitlement', schema: 'core' })
|
@Entity({ name: 'billingEntitlement', schema: 'core' })
|
||||||
@ObjectType()
|
@ObjectType()
|
||||||
@Unique('IndexOnFeatureKeyAndWorkspaceIdUnique', ['key', 'workspaceId'])
|
@Unique('IDX_BILLING_ENTITLEMENT_KEY_WORKSPACE_ID_UNIQUE', [
|
||||||
|
'key',
|
||||||
|
'workspaceId',
|
||||||
|
])
|
||||||
export class BillingEntitlement {
|
export class BillingEntitlement {
|
||||||
@IDField(() => UUIDScalarType)
|
@IDField(() => UUIDScalarType)
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
|||||||
@ -17,10 +17,10 @@ import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing
|
|||||||
import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity';
|
import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity';
|
||||||
import { BillingSubscriptionItemMetadata } from 'src/engine/core-modules/billing/types/billing-subscription-item-metadata.type';
|
import { BillingSubscriptionItemMetadata } from 'src/engine/core-modules/billing/types/billing-subscription-item-metadata.type';
|
||||||
@Entity({ name: 'billingSubscriptionItem', schema: 'core' })
|
@Entity({ name: 'billingSubscriptionItem', schema: 'core' })
|
||||||
@Unique('IndexOnBillingSubscriptionIdAndStripeProductIdUnique', [
|
@Unique(
|
||||||
'billingSubscriptionId',
|
'IDX_BILLING_SUBSCRIPTION_ITEM_BILLING_SUBSCRIPTION_ID_STRIPE_PRODUCT_ID_UNIQUE',
|
||||||
'stripeProductId',
|
['billingSubscriptionId', 'stripeProductId'],
|
||||||
])
|
)
|
||||||
export class BillingSubscriptionItem {
|
export class BillingSubscriptionItem {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@ -29,7 +29,7 @@ registerEnumType(SubscriptionStatus, { name: 'SubscriptionStatus' });
|
|||||||
registerEnumType(SubscriptionInterval, { name: 'SubscriptionInterval' });
|
registerEnumType(SubscriptionInterval, { name: 'SubscriptionInterval' });
|
||||||
|
|
||||||
@Entity({ name: 'billingSubscription', schema: 'core' })
|
@Entity({ name: 'billingSubscription', schema: 'core' })
|
||||||
@Index('IndexOnActiveSubscriptionPerWorkspace', ['workspaceId'], {
|
@Index('IDX_BILLING_SUBSCRIPTION_WORKSPACE_ID_UNIQUE', ['workspaceId'], {
|
||||||
unique: true,
|
unique: true,
|
||||||
where: `status IN ('trialing', 'active', 'past_due')`,
|
where: `status IN ('trialing', 'active', 'past_due')`,
|
||||||
})
|
})
|
||||||
|
|||||||
@ -18,7 +18,7 @@ import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
|||||||
|
|
||||||
@Entity({ name: 'featureFlag', schema: 'core' })
|
@Entity({ name: 'featureFlag', schema: 'core' })
|
||||||
@ObjectType()
|
@ObjectType()
|
||||||
@Unique('IndexOnKeyAndWorkspaceIdUnique', ['key', 'workspaceId'])
|
@Unique('IDX_FEATURE_FLAG_KEY_WORKSPACE_ID_UNIQUE', ['key', 'workspaceId'])
|
||||||
export class FeatureFlag {
|
export class FeatureFlag {
|
||||||
@IDField(() => UUIDScalarType)
|
@IDField(() => UUIDScalarType)
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
|||||||
@ -26,15 +26,27 @@ export enum KeyValuePairType {
|
|||||||
|
|
||||||
@Entity({ name: 'keyValuePair', schema: 'core' })
|
@Entity({ name: 'keyValuePair', schema: 'core' })
|
||||||
@ObjectType()
|
@ObjectType()
|
||||||
@Unique('IndexOnKeyUserIdWorkspaceIdUnique', ['key', 'userId', 'workspaceId'])
|
@Unique('IDX_KEY_VALUE_PAIR_KEY_USER_ID_WORKSPACE_ID_UNIQUE', [
|
||||||
@Index('IndexOnKeyWorkspaceIdAndNullUserIdUnique', ['key', 'workspaceId'], {
|
'key',
|
||||||
unique: true,
|
'userId',
|
||||||
where: '"userId" is NULL',
|
'workspaceId',
|
||||||
})
|
])
|
||||||
@Index('IndexOnKeyUserIdAndNullWorkspaceIdUnique', ['key', 'userId'], {
|
@Index(
|
||||||
unique: true,
|
'IDX_KEY_VALUE_PAIR_KEY_WORKSPACE_ID_NULL_USER_ID_UNIQUE',
|
||||||
where: '"workspaceId" is NULL',
|
['key', 'workspaceId'],
|
||||||
})
|
{
|
||||||
|
unique: true,
|
||||||
|
where: '"userId" is NULL',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
@Index(
|
||||||
|
'IDX_KEY_VALUE_PAIR_KEY_USER_ID_NULL_WORKSPACE_ID_UNIQUE',
|
||||||
|
['key', 'userId'],
|
||||||
|
{
|
||||||
|
unique: true,
|
||||||
|
where: '"workspaceId" is NULL',
|
||||||
|
},
|
||||||
|
)
|
||||||
export class KeyValuePair {
|
export class KeyValuePair {
|
||||||
@IDField(() => UUIDScalarType)
|
@IDField(() => UUIDScalarType)
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import {
|
|||||||
CreateDateColumn,
|
CreateDateColumn,
|
||||||
DeleteDateColumn,
|
DeleteDateColumn,
|
||||||
Entity,
|
Entity,
|
||||||
|
Index,
|
||||||
JoinColumn,
|
JoinColumn,
|
||||||
ManyToOne,
|
ManyToOne,
|
||||||
OneToMany,
|
OneToMany,
|
||||||
@ -33,7 +34,13 @@ registerEnumType(PermissionsOnAllObjectRecords, {
|
|||||||
|
|
||||||
@Entity({ name: 'userWorkspace', schema: 'core' })
|
@Entity({ name: 'userWorkspace', schema: 'core' })
|
||||||
@ObjectType()
|
@ObjectType()
|
||||||
@Unique('IndexOnUserIdAndWorkspaceIdUnique', ['userId', 'workspaceId'])
|
@Unique('IDX_USER_WORKSPACE_USER_ID_WORKSPACE_ID_UNIQUE', [
|
||||||
|
'userId',
|
||||||
|
'workspaceId',
|
||||||
|
])
|
||||||
|
@Index('IDX_USER_WORKSPACE_ID_DELETED_AT', ['id', 'deletedAt'])
|
||||||
|
@Index('IDX_USER_WORKSPACE_USER_ID', ['userId'])
|
||||||
|
@Index('IDX_USER_WORKSPACE_WORKSPACE_ID', ['workspaceId'])
|
||||||
export class UserWorkspace {
|
export class UserWorkspace {
|
||||||
@IDField(() => UUIDScalarType)
|
@IDField(() => UUIDScalarType)
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
|||||||
@ -34,6 +34,7 @@ registerEnumType(OnboardingStatus, {
|
|||||||
unique: true,
|
unique: true,
|
||||||
where: '"deletedAt" IS NULL',
|
where: '"deletedAt" IS NULL',
|
||||||
})
|
})
|
||||||
|
@Index('IDX_USER_ID_DELETED_AT', ['id', 'deletedAt'])
|
||||||
export class User {
|
export class User {
|
||||||
@IDField(() => UUIDScalarType)
|
@IDField(() => UUIDScalarType)
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import {
|
|||||||
CreateDateColumn,
|
CreateDateColumn,
|
||||||
DeleteDateColumn,
|
DeleteDateColumn,
|
||||||
Entity,
|
Entity,
|
||||||
|
Index,
|
||||||
OneToMany,
|
OneToMany,
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
Relation,
|
Relation,
|
||||||
@ -34,6 +35,7 @@ registerEnumType(WorkspaceActivationStatus, {
|
|||||||
)
|
)
|
||||||
@Entity({ name: 'workspace', schema: 'core' })
|
@Entity({ name: 'workspace', schema: 'core' })
|
||||||
@ObjectType()
|
@ObjectType()
|
||||||
|
@Index('IDX_WORKSPACE_ID_DELETED_AT', ['id', 'deletedAt'])
|
||||||
export class Workspace {
|
export class Workspace {
|
||||||
// Fields
|
// Fields
|
||||||
@IDField(() => UUIDScalarType)
|
@IDField(() => UUIDScalarType)
|
||||||
|
|||||||
@ -25,17 +25,21 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat
|
|||||||
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
||||||
|
|
||||||
@Entity('fieldMetadata')
|
@Entity('fieldMetadata')
|
||||||
@Unique('IndexOnNameObjectMetadataIdAndWorkspaceIdUnique', [
|
@Unique('IDX_FIELD_METADATA_NAME_OBJECT_METADATA_ID_WORKSPACE_ID_UNIQUE', [
|
||||||
'name',
|
'name',
|
||||||
'objectMetadataId',
|
'objectMetadataId',
|
||||||
'workspaceId',
|
'workspaceId',
|
||||||
])
|
])
|
||||||
@Index('IndexOnRelationTargetFieldMetadataId', [
|
@Index('IDX_FIELD_METADATA_RELATION_TARGET_FIELD_METADATA_ID', [
|
||||||
'relationTargetFieldMetadataId',
|
'relationTargetFieldMetadataId',
|
||||||
])
|
])
|
||||||
@Index('IndexOnRelationTargetObjectMetadataId', [
|
@Index('IDX_FIELD_METADATA_RELATION_TARGET_OBJECT_METADATA_ID', [
|
||||||
'relationTargetObjectMetadataId',
|
'relationTargetObjectMetadataId',
|
||||||
])
|
])
|
||||||
|
@Index('IDX_FIELD_METADATA_OBJECT_METADATA_ID_WORKSPACE_ID', [
|
||||||
|
'objectMetadataId',
|
||||||
|
'workspaceId',
|
||||||
|
])
|
||||||
export class FieldMetadataEntity<
|
export class FieldMetadataEntity<
|
||||||
T extends FieldMetadataType = FieldMetadataType,
|
T extends FieldMetadataType = FieldMetadataType,
|
||||||
> implements FieldMetadataInterface<T>
|
> implements FieldMetadataInterface<T>
|
||||||
@ -53,7 +57,7 @@ export class FieldMetadataEntity<
|
|||||||
onDelete: 'CASCADE',
|
onDelete: 'CASCADE',
|
||||||
})
|
})
|
||||||
@JoinColumn({ name: 'objectMetadataId' })
|
@JoinColumn({ name: 'objectMetadataId' })
|
||||||
@Index('IndexOnObjectMetadataId')
|
@Index('IDX_FIELD_METADATA_OBJECT_METADATA_ID', ['objectMetadataId'])
|
||||||
object: Relation<ObjectMetadataEntity>;
|
object: Relation<ObjectMetadataEntity>;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
@ -102,7 +106,7 @@ export class FieldMetadataEntity<
|
|||||||
isUnique: boolean;
|
isUnique: boolean;
|
||||||
|
|
||||||
@Column({ nullable: false, type: 'uuid' })
|
@Column({ nullable: false, type: 'uuid' })
|
||||||
@Index('IndexOnWorkspaceId')
|
@Index('IDX_FIELD_METADATA_WORKSPACE_ID', ['workspaceId'])
|
||||||
workspaceId: string;
|
workspaceId: string;
|
||||||
|
|
||||||
@Column({ default: false })
|
@Column({ default: false })
|
||||||
|
|||||||
@ -32,7 +32,7 @@ export class IndexFieldMetadataEntity {
|
|||||||
indexMetadata: Relation<IndexMetadataEntity>;
|
indexMetadata: Relation<IndexMetadataEntity>;
|
||||||
|
|
||||||
@Column({ nullable: false })
|
@Column({ nullable: false })
|
||||||
@Index('IndexOnFieldMetadataId')
|
@Index('IDX_INDEX_FIELD_METADATA_FIELD_METADATA_ID', ['fieldMetadataId'])
|
||||||
fieldMetadataId: string;
|
fieldMetadataId: string;
|
||||||
|
|
||||||
@ManyToOne(
|
@ManyToOne(
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import {
|
|||||||
Column,
|
Column,
|
||||||
CreateDateColumn,
|
CreateDateColumn,
|
||||||
Entity,
|
Entity,
|
||||||
|
Index,
|
||||||
JoinColumn,
|
JoinColumn,
|
||||||
ManyToOne,
|
ManyToOne,
|
||||||
OneToMany,
|
OneToMany,
|
||||||
@ -19,11 +20,15 @@ export enum IndexType {
|
|||||||
GIN = 'GIN',
|
GIN = 'GIN',
|
||||||
}
|
}
|
||||||
|
|
||||||
@Unique('IndexOnNameAndWorkspaceIdAndObjectMetadataUnique', [
|
@Unique('IDX_INDEX_METADATA_NAME_WORKSPACE_ID_OBJECT_METADATA_ID_UNIQUE', [
|
||||||
'name',
|
'name',
|
||||||
'workspaceId',
|
'workspaceId',
|
||||||
'objectMetadataId',
|
'objectMetadataId',
|
||||||
])
|
])
|
||||||
|
@Index('IDX_INDEX_METADATA_WORKSPACE_ID_OBJECT_METADATA_ID', [
|
||||||
|
'workspaceId',
|
||||||
|
'objectMetadataId',
|
||||||
|
])
|
||||||
@Entity('indexMetadata')
|
@Entity('indexMetadata')
|
||||||
export class IndexMetadataEntity {
|
export class IndexMetadataEntity {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
|||||||
@ -21,11 +21,14 @@ import { ObjectPermissionEntity } from 'src/engine/metadata-modules/object-permi
|
|||||||
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
||||||
|
|
||||||
@Entity('objectMetadata')
|
@Entity('objectMetadata')
|
||||||
@Unique('IndexOnNameSingularAndWorkspaceIdUnique', [
|
@Unique('IDX_OBJECT_METADATA_NAME_SINGULAR_WORKSPACE_ID_UNIQUE', [
|
||||||
'nameSingular',
|
'nameSingular',
|
||||||
'workspaceId',
|
'workspaceId',
|
||||||
])
|
])
|
||||||
@Unique('IndexOnNamePluralAndWorkspaceIdUnique', ['namePlural', 'workspaceId'])
|
@Unique('IDX_OBJECT_METADATA_NAME_PLURAL_WORKSPACE_ID_UNIQUE', [
|
||||||
|
'namePlural',
|
||||||
|
'workspaceId',
|
||||||
|
])
|
||||||
export class ObjectMetadataEntity implements ObjectMetadataInterface {
|
export class ObjectMetadataEntity implements ObjectMetadataInterface {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@ -14,7 +14,10 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat
|
|||||||
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
|
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
|
||||||
|
|
||||||
@Entity('objectPermission')
|
@Entity('objectPermission')
|
||||||
@Unique('IndexOnObjectPermissionUnique', ['objectMetadataId', 'roleId'])
|
@Unique('IDX_OBJECT_PERMISSION_OBJECT_METADATA_ID_ROLE_ID_UNIQUE', [
|
||||||
|
'objectMetadataId',
|
||||||
|
'roleId',
|
||||||
|
])
|
||||||
export class ObjectPermissionEntity {
|
export class ObjectPermissionEntity {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import { UserWorkspaceRoleEntity } from 'src/engine/metadata-modules/role/user-w
|
|||||||
import { SettingPermissionEntity } from 'src/engine/metadata-modules/setting-permission/setting-permission.entity';
|
import { SettingPermissionEntity } from 'src/engine/metadata-modules/setting-permission/setting-permission.entity';
|
||||||
|
|
||||||
@Entity('role')
|
@Entity('role')
|
||||||
@Unique('IndexOnRoleUnique', ['label', 'workspaceId'])
|
@Unique('IDX_ROLE_LABEL_WORKSPACE_ID_UNIQUE', ['label', 'workspaceId'])
|
||||||
export class RoleEntity {
|
export class RoleEntity {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import {
|
|||||||
Column,
|
Column,
|
||||||
CreateDateColumn,
|
CreateDateColumn,
|
||||||
Entity,
|
Entity,
|
||||||
|
Index,
|
||||||
JoinColumn,
|
JoinColumn,
|
||||||
ManyToOne,
|
ManyToOne,
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
@ -13,7 +14,14 @@ import {
|
|||||||
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
|
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
|
||||||
|
|
||||||
@Entity('userWorkspaceRole')
|
@Entity('userWorkspaceRole')
|
||||||
@Unique('IndexOnUserWorkspaceRoleUnique', ['userWorkspaceId', 'roleId'])
|
@Unique('IDX_USER_WORKSPACE_ROLE_USER_WORKSPACE_ID_ROLE_ID_UNIQUE', [
|
||||||
|
'userWorkspaceId',
|
||||||
|
'roleId',
|
||||||
|
])
|
||||||
|
@Index('IDX_USER_WORKSPACE_ROLE_USER_WORKSPACE_ID_WORKSPACE_ID', [
|
||||||
|
'userWorkspaceId',
|
||||||
|
'workspaceId',
|
||||||
|
])
|
||||||
export class UserWorkspaceRoleEntity {
|
export class UserWorkspaceRoleEntity {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import { SettingPermissionType } from 'src/engine/metadata-modules/permissions/c
|
|||||||
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
|
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
|
||||||
|
|
||||||
@Entity('settingPermission')
|
@Entity('settingPermission')
|
||||||
@Unique('IndexOnSettingPermissionUnique', ['setting', 'roleId'])
|
@Unique('IDX_SETTING_PERMISSION_SETTING_ROLE_ID_UNIQUE', ['setting', 'roleId'])
|
||||||
export class SettingPermissionEntity {
|
export class SettingPermissionEntity {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
Reference in New Issue
Block a user