From 639842182cc60b6276f2cc931c17ac324275ac09 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Thu, 21 Mar 2024 20:31:32 +0000 Subject: [PATCH] Replace space privacy with visibility * Make creatorId nullable --- .../src/core/space/entities/space.entity.ts | 8 ++++---- .../workspace/entities/workspace.entity.ts | 6 +++--- .../1711051968957-RenameSpacePrivacyColumn.ts | 14 ++++++++++++++ .../1711052439145-WorkspaceCreatorFK.ts | 17 +++++++++++++++++ ...1711053025788-MakeSpaceCreatorIdNullable.ts | 18 ++++++++++++++++++ apps/server/src/helpers/types/permission.ts | 2 +- 6 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 apps/server/src/database/migrations/1711051968957-RenameSpacePrivacyColumn.ts create mode 100644 apps/server/src/database/migrations/1711052439145-WorkspaceCreatorFK.ts create mode 100644 apps/server/src/database/migrations/1711053025788-MakeSpaceCreatorIdNullable.ts diff --git a/apps/server/src/core/space/entities/space.entity.ts b/apps/server/src/core/space/entities/space.entity.ts index 91ef680..35b23a6 100644 --- a/apps/server/src/core/space/entities/space.entity.ts +++ b/apps/server/src/core/space/entities/space.entity.ts @@ -13,7 +13,7 @@ import { User } from '../../user/entities/user.entity'; import { Workspace } from '../../workspace/entities/workspace.entity'; import { SpaceUser } from './space-user.entity'; import { Page } from '../../page/entities/page.entity'; -import { SpacePrivacy, SpaceRole } from '../../../helpers/types/permission'; +import { SpaceVisibility, SpaceRole } from '../../../helpers/types/permission'; import { SpaceGroup } from './space-group.entity'; @Entity('spaces') @@ -34,13 +34,13 @@ export class Space { @Column({ length: 255, nullable: true }) icon: string; - @Column({ length: 100, default: SpacePrivacy.OPEN }) - privacy: string; + @Column({ length: 100, default: SpaceVisibility.OPEN }) + visibility: string; @Column({ length: 100, default: SpaceRole.WRITER }) defaultRole: string; - @Column() + @Column({ nullable: true }) creatorId: string; @ManyToOne(() => User) diff --git a/apps/server/src/core/workspace/entities/workspace.entity.ts b/apps/server/src/core/workspace/entities/workspace.entity.ts index c41b52f..d60fad5 100644 --- a/apps/server/src/core/workspace/entities/workspace.entity.ts +++ b/apps/server/src/core/workspace/entities/workspace.entity.ts @@ -52,9 +52,9 @@ export class Workspace { @Column({ nullable: true, type: 'uuid' }) creatorId: string; - //@ManyToOne(() => User, (user) => user.workspaces) - // @JoinColumn({ name: 'creatorId' }) - // creator: User; + @OneToOne(() => User) + @JoinColumn({ name: 'creatorId' }) + creator: User; @Column({ nullable: true }) defaultSpaceId: string; diff --git a/apps/server/src/database/migrations/1711051968957-RenameSpacePrivacyColumn.ts b/apps/server/src/database/migrations/1711051968957-RenameSpacePrivacyColumn.ts new file mode 100644 index 0000000..4cfef25 --- /dev/null +++ b/apps/server/src/database/migrations/1711051968957-RenameSpacePrivacyColumn.ts @@ -0,0 +1,14 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class RenameSpacePrivacyColumn1711051968957 implements MigrationInterface { + name = 'RenameSpacePrivacyColumn1711051968957' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "spaces" RENAME COLUMN "privacy" TO "visibility"`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "spaces" RENAME COLUMN "visibility" TO "privacy"`); + } + +} diff --git a/apps/server/src/database/migrations/1711052439145-WorkspaceCreatorFK.ts b/apps/server/src/database/migrations/1711052439145-WorkspaceCreatorFK.ts new file mode 100644 index 0000000..ae994e5 --- /dev/null +++ b/apps/server/src/database/migrations/1711052439145-WorkspaceCreatorFK.ts @@ -0,0 +1,17 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class WorkspaceCreatorFK1711052439145 implements MigrationInterface { + name = 'WorkspaceCreatorFK1711052439145' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "workspaces" ADD CONSTRAINT "UQ_2aab2dd12dc65eb183d99b953e0" UNIQUE ("creatorId")`); + await queryRunner.query(`ALTER TABLE "workspaces" ADD CONSTRAINT "FK_2aab2dd12dc65eb183d99b953e0" FOREIGN KEY ("creatorId") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "workspaces" DROP CONSTRAINT "FK_2aab2dd12dc65eb183d99b953e0"`); + await queryRunner.query(`ALTER TABLE "workspaces" DROP CONSTRAINT "UQ_2aab2dd12dc65eb183d99b953e0"`); + await queryRunner.query(`ALTER TABLE "spaces" RENAME COLUMN "visibility" TO "privacy"`); + } + +} diff --git a/apps/server/src/database/migrations/1711053025788-MakeSpaceCreatorIdNullable.ts b/apps/server/src/database/migrations/1711053025788-MakeSpaceCreatorIdNullable.ts new file mode 100644 index 0000000..d00479a --- /dev/null +++ b/apps/server/src/database/migrations/1711053025788-MakeSpaceCreatorIdNullable.ts @@ -0,0 +1,18 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class MakeSpaceCreatorIdNullable1711053025788 implements MigrationInterface { + name = 'MakeSpaceCreatorIdNullable1711053025788' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "spaces" DROP CONSTRAINT "FK_8469f60fb94d43a0280a83d0b35"`); + await queryRunner.query(`ALTER TABLE "spaces" ALTER COLUMN "creatorId" DROP NOT NULL`); + await queryRunner.query(`ALTER TABLE "spaces" ADD CONSTRAINT "FK_8469f60fb94d43a0280a83d0b35" FOREIGN KEY ("creatorId") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "spaces" DROP CONSTRAINT "FK_8469f60fb94d43a0280a83d0b35"`); + await queryRunner.query(`ALTER TABLE "spaces" ALTER COLUMN "creatorId" SET NOT NULL`); + await queryRunner.query(`ALTER TABLE "spaces" ADD CONSTRAINT "FK_8469f60fb94d43a0280a83d0b35" FOREIGN KEY ("creatorId") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`); + } + +} diff --git a/apps/server/src/helpers/types/permission.ts b/apps/server/src/helpers/types/permission.ts index 4e8ddc2..78a41d8 100644 --- a/apps/server/src/helpers/types/permission.ts +++ b/apps/server/src/helpers/types/permission.ts @@ -10,7 +10,7 @@ export enum SpaceRole { READER = 'reader', // can only read pages in space } -export enum SpacePrivacy { +export enum SpaceVisibility { OPEN = 'open', // any workspace member can see and join. PRIVATE = 'private', // only added space users can see }