From 8a7a86b3c66bdd828767984065c7a25ad1a3d336 Mon Sep 17 00:00:00 2001 From: Etienne <45695613+etiennejouan@users.noreply.github.com> Date: Fri, 27 Jun 2025 13:35:42 +0200 Subject: [PATCH] Workspace creation - fix not found file during avatar picture copy (#12920) Context : Sentry error - https://twenty-v7.sentry.io/issues/6563326453/?environment=prod&project=4507072499810304&query=is%3Aunresolved%20issue.priority%3A%5Bhigh%2C%20medium%5D&referrer=issue-stream&sort=date&stream_index=0 If a userWorkspace loses its default avatar picture (how can this happen? This was spotted for twenty core team userWorkspaces, so it may be very specific), the user can't create another workspace. Test : - Create a workspace via a signup with a Google/Microsoft account having a profile pic. - Delete the profile pic in storage - Try to create an other workspace --- .../user-workspace/user-workspace.service.ts | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts index 681fce87f..6eb9609aa 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts @@ -6,6 +6,7 @@ import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared/translations'; import { isDefined } from 'twenty-shared/utils'; import { IsNull, Not, Repository } from 'typeorm'; +import { FileStorageExceptionCode } from 'src/engine/core-modules/file-storage/interfaces/file-storage-exception'; import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface'; import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action'; @@ -368,14 +369,21 @@ export class UserWorkspaceService extends TypeOrmQueryService { if (!isDefined(userWorkspace?.defaultAvatarUrl)) return; - const [_, subFolder, filename] = - await this.fileService.copyFileFromWorkspaceToWorkspace( - userWorkspace.workspaceId, - userWorkspace.defaultAvatarUrl, - workspaceId, - ); + try { + const [_, subFolder, filename] = + await this.fileService.copyFileFromWorkspaceToWorkspace( + userWorkspace.workspaceId, + userWorkspace.defaultAvatarUrl, + workspaceId, + ); - return `${subFolder}/${filename}`; + return `${subFolder}/${filename}`; + } catch (error) { + if (error.code === FileStorageExceptionCode.FILE_NOT_FOUND) { + return; + } + throw error; + } } if (!isDefined(pictureUrl)) return;