From 23499735b4d688cde7415365bab8d756f2af3011 Mon Sep 17 00:00:00 2001 From: Melvin Jariwala Date: Thu, 2 Jan 2025 18:44:28 +0530 Subject: [PATCH] fix: Resolve "Can't delete an account" issue (#9232) (#9238) ### Summary This pull request addresses the issue described in #9232, where attempting to delete a user account results in a `TypeError: Cannot read properties of undefined (reading 'dataSourceService')`. ### Changes Made - Fixed the `this` context issue in the `deleteUserFromWorkspace` method by ensuring it is correctly bound. - Updated the `deleteUser` method to use a bound function when calling `deleteUserFromWorkspace`. ### Linked Issue This pull request fixes #9232. ### Additional Notes - Please review the changes carefully to ensure no unintended side effects in the user or workspace deletion process. - Suggestions for further improvement are welcome. --------- Co-authored-by: Lucas Bordeau Co-authored-by: Weiko --- .../core-modules/user/services/user.service.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 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 c1793d03e..43a8c6d00 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 @@ -96,14 +96,14 @@ export class UserService extends TypeOrmQueryService { assert(workspaceMember, 'WorkspaceMember not found'); - if (workspaceMembers.length === 1) { - await this.workspaceService.deleteWorkspace(workspaceId); - } - await workspaceDataSource?.query( `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', @@ -136,7 +136,9 @@ export class UserService extends TypeOrmQueryService { userValidator.assertIsDefinedOrThrow(user); - await Promise.all(user.workspaces.map(this.deleteUserFromWorkspace)); + await Promise.all( + user.workspaces.map(this.deleteUserFromWorkspace.bind(this)), + ); return user; }