diff --git a/packages/twenty-server/src/database/typeorm/core/migrations/common/1742998832316-addWorkspaceConstraint.ts b/packages/twenty-server/src/database/typeorm/core/migrations/common/1742998832316-addWorkspaceConstraint.ts new file mode 100644 index 000000000..c6e6e5ce3 --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/core/migrations/common/1742998832316-addWorkspaceConstraint.ts @@ -0,0 +1,17 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddWorkspaceConstraint1742998832316 implements MigrationInterface { + name = 'AddWorkspaceConstraint1742998832316'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."workspace" ADD CONSTRAINT "onboarded_workspace_requires_default_role" CHECK ("activationStatus" IN ('PENDING_CREATION', 'ONGOING_CREATION') OR "defaultRoleId" IS NOT NULL)`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."workspace" DROP CONSTRAINT "onboarded_workspace_requires_default_role"`, + ); + } +} diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts index 7b6c969f4..69d13f70d 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts @@ -3,6 +3,7 @@ import { Field, ObjectType, registerEnumType } from '@nestjs/graphql'; import { IDField } from '@ptc-org/nestjs-query-graphql'; import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; import { + Check, Column, CreateDateColumn, DeleteDateColumn, @@ -27,6 +28,10 @@ registerEnumType(WorkspaceActivationStatus, { name: 'WorkspaceActivationStatus', }); +@Check( + 'onboarded_workspace_requires_default_role', + `"activationStatus" IN ('PENDING_CREATION', 'ONGOING_CREATION') OR "defaultRoleId" IS NOT NULL`, +) @Entity({ name: 'workspace', schema: 'core' }) @ObjectType() export class Workspace {