From 0dff20775bf645dd066b81b47a8ad1b1f99ef2c1 Mon Sep 17 00:00:00 2001 From: Weiko Date: Thu, 2 Jan 2025 16:15:25 +0100 Subject: [PATCH] Fix user deletion when workspace is deleted (#9321) ## Context 2 issues here: - We use a metadata repository find method without providing a workspaceId: In practice this is not an issue in this specific part but let's avoid that pattern - await this.workspaceService.deleteWorkspace(workspaceId); deletes almost everything, emitting an event on workspaceMember could potentially bring issues and not much values imho --- .../user/services/user.service.ts | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/twenty-server/src/engine/core-modules/user/services/user.service.ts b/packages/twenty-server/src/engine/core-modules/user/services/user.service.ts index 43a8c6d00..60ed6c29a 100644 --- a/packages/twenty-server/src/engine/core-modules/user/services/user.service.ts +++ b/packages/twenty-server/src/engine/core-modules/user/services/user.service.ts @@ -6,23 +6,23 @@ import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; import { Repository } from 'typeorm'; import { TypeORMService } from 'src/database/typeorm/typeorm.service'; +import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action'; +import { + AuthException, + AuthExceptionCode, +} from 'src/engine/core-modules/auth/auth.exception'; import { User } from 'src/engine/core-modules/user/user.entity'; +import { userValidator } from 'src/engine/core-modules/user/user.validate'; import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; import { Workspace, WorkspaceActivationStatus, } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; +import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter'; import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; -import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action'; -import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; -import { userValidator } from 'src/engine/core-modules/user/user.validate'; -import { - AuthException, - AuthExceptionCode, -} from 'src/engine/core-modules/auth/auth.exception'; // eslint-disable-next-line @nx/workspace-inject-workspace-repository export class UserService extends TypeOrmQueryService { @@ -100,16 +100,19 @@ export class UserService extends TypeOrmQueryService { `DELETE FROM ${dataSourceMetadata.schema}."workspaceMember" WHERE "userId" = '${userId}'`, ); - if (workspaceMembers.length === 1) { - await this.workspaceService.deleteWorkspace(workspaceId); - } - const objectMetadata = await this.objectMetadataRepository.findOneOrFail({ where: { nameSingular: 'workspaceMember', + workspaceId: workspaceId, }, }); + if (workspaceMembers.length === 1) { + await this.workspaceService.deleteWorkspace(workspaceId); + + return; + } + this.workspaceEventEmitter.emitDatabaseBatchEvent({ objectMetadataNameSingular: 'workspaceMember', action: DatabaseEventAction.DELETED,