diff --git a/components/gitpod-db/src/typeorm/entity/db-workspace-cluster.ts b/components/gitpod-db/src/typeorm/entity/db-workspace-cluster.ts index 79fd8a9d881d96..20b132c7c4fa71 100644 --- a/components/gitpod-db/src/typeorm/entity/db-workspace-cluster.ts +++ b/components/gitpod-db/src/typeorm/entity/db-workspace-cluster.ts @@ -91,4 +91,8 @@ export class DBWorkspaceCluster implements WorkspaceCluster { length: 60, }) applicationCluster: string; + + // This column triggers the db-sync deletion mechanism. It's not intended for public consumption. + @Column() + deleted: boolean; } diff --git a/components/gitpod-db/src/typeorm/migration/1667375160684-AddDeletedColumnToWorkspaceClusterTable.ts b/components/gitpod-db/src/typeorm/migration/1667375160684-AddDeletedColumnToWorkspaceClusterTable.ts new file mode 100644 index 00000000000000..475d976c1c3a01 --- /dev/null +++ b/components/gitpod-db/src/typeorm/migration/1667375160684-AddDeletedColumnToWorkspaceClusterTable.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2022 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License-AGPL.txt in the project root for license information. + */ + +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddDeletedColumnToWorkspaceClusterTable1667375160684 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + "ALTER TABLE d_b_workspace_cluster ADD COLUMN `deleted` tinyint(4) NOT NULL DEFAULT '0'", + ); + } + + public async down(queryRunner: QueryRunner): Promise {} +} diff --git a/components/gitpod-db/src/workspace-cluster-db.spec.db.ts b/components/gitpod-db/src/workspace-cluster-db.spec.db.ts index 9388d49c90e725..7b7a3c6deced9e 100644 --- a/components/gitpod-db/src/workspace-cluster-db.spec.db.ts +++ b/components/gitpod-db/src/workspace-cluster-db.spec.db.ts @@ -37,7 +37,7 @@ export class WorkspaceClusterDBSpec { } @test public async findByName() { - const wsc1: DBWorkspaceCluster = { + const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({ name: "eu71", applicationCluster: "eu02", url: "some-url", @@ -45,8 +45,8 @@ export class WorkspaceClusterDBSpec { score: 100, maxScore: 100, govern: true, - }; - const wsc1a: DBWorkspaceCluster = { + }); + const wsc1a: DBWorkspaceCluster = dbWorkspaceCluster({ name: "eu71", applicationCluster: "us02", url: "some-url", @@ -54,8 +54,8 @@ export class WorkspaceClusterDBSpec { score: 0, maxScore: 0, govern: false, - }; - const wsc2: DBWorkspaceCluster = { + }); + const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({ name: "us71", applicationCluster: "eu02", url: "some-url", @@ -63,7 +63,7 @@ export class WorkspaceClusterDBSpec { score: 0, maxScore: 0, govern: false, - }; + }); await this.db.save(wsc1); await this.db.save(wsc1a); @@ -89,7 +89,7 @@ export class WorkspaceClusterDBSpec { } @test public async deleteByName() { - const wsc1: DBWorkspaceCluster = { + const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({ name: "eu71", applicationCluster: "eu02", url: "some-url", @@ -97,8 +97,8 @@ export class WorkspaceClusterDBSpec { score: 100, maxScore: 100, govern: true, - }; - const wsc1a: DBWorkspaceCluster = { + }); + const wsc1a: DBWorkspaceCluster = dbWorkspaceCluster({ name: "eu71", applicationCluster: "us02", url: "some-url", @@ -106,8 +106,8 @@ export class WorkspaceClusterDBSpec { score: 0, maxScore: 0, govern: false, - }; - const wsc2: DBWorkspaceCluster = { + }); + const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({ name: "us71", applicationCluster: "eu02", url: "some-url", @@ -115,7 +115,7 @@ export class WorkspaceClusterDBSpec { score: 0, maxScore: 0, govern: false, - }; + }); await this.db.save(wsc1); await this.db.save(wsc1a); @@ -129,7 +129,7 @@ export class WorkspaceClusterDBSpec { } @test public async testFindFilteredByName() { - const wsc1: DBWorkspaceCluster = { + const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({ name: "eu71", applicationCluster: "eu02", url: "some-url", @@ -137,8 +137,8 @@ export class WorkspaceClusterDBSpec { score: 100, maxScore: 100, govern: true, - }; - const wsc1a: DBWorkspaceCluster = { + }); + const wsc1a: DBWorkspaceCluster = dbWorkspaceCluster({ name: "eu71", applicationCluster: "us02", url: "some-url", @@ -146,8 +146,8 @@ export class WorkspaceClusterDBSpec { score: 0, maxScore: 0, govern: false, - }; - const wsc2: DBWorkspaceCluster = { + }); + const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({ name: "us71", applicationCluster: "eu02", url: "some-url", @@ -155,7 +155,7 @@ export class WorkspaceClusterDBSpec { score: 0, maxScore: 0, govern: false, - }; + }); await this.db.save(wsc1); await this.db.save(wsc1a); @@ -168,7 +168,7 @@ export class WorkspaceClusterDBSpec { } @test public async testFindFilteredByApplicationCluster() { - const wsc1: DBWorkspaceCluster = { + const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({ name: "eu71", applicationCluster: "eu02", url: "some-url", @@ -176,8 +176,8 @@ export class WorkspaceClusterDBSpec { score: 100, maxScore: 100, govern: true, - }; - const wsc1a: DBWorkspaceCluster = { + }); + const wsc1a: DBWorkspaceCluster = dbWorkspaceCluster({ name: "eu71", applicationCluster: "us02", url: "some-url", @@ -185,8 +185,8 @@ export class WorkspaceClusterDBSpec { score: 0, maxScore: 0, govern: false, - }; - const wsc2: DBWorkspaceCluster = { + }); + const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({ name: "us71", applicationCluster: "us02", url: "some-url", @@ -194,7 +194,7 @@ export class WorkspaceClusterDBSpec { score: 100, maxScore: 100, govern: true, - }; + }); await this.db.save(wsc1); await this.db.save(wsc1a); @@ -244,4 +244,8 @@ export class WorkspaceClusterDBSpec { } } +function dbWorkspaceCluster(cluster: Omit): DBWorkspaceCluster { + return { ...cluster, deleted: false }; +} + module.exports = WorkspaceClusterDBSpec;