From f8c057deea3e42dfda223863a32edfc46bbc9779 Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Tue, 25 Jun 2024 10:59:07 +0200 Subject: [PATCH] Fix sign up broken because of missing workspace schema (#6013) Allow workspace datasource factory to return null if the workspace schema has not been created yet --- .../data-source/data-source.service.ts | 9 +++++++++ .../factories/workspace-datasource.factory.ts | 11 +++++++++-- .../src/engine/twenty-orm/twenty-orm.manager.ts | 5 +++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.service.ts b/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.service.ts index 226b5a9ca..6e6f46a4c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.service.ts @@ -46,6 +46,15 @@ export class DataSourceService { }); } + async getLastDataSourceMetadataFromWorkspaceId( + workspaceId: string, + ): Promise { + return this.dataSourceMetadataRepository.findOne({ + where: { workspaceId }, + order: { createdAt: 'DESC' }, + }); + } + async getLastDataSourceMetadataFromWorkspaceIdOrFail( workspaceId: string, ): Promise { diff --git a/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts b/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts index f7447a131..2c733961a 100644 --- a/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts +++ b/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts @@ -14,7 +14,10 @@ export class WorkspaceDatasourceFactory { private readonly environmentService: EnvironmentService, ) {} - public async create(entities: EntitySchema[], workspaceId: string) { + public async create( + entities: EntitySchema[], + workspaceId: string, + ): Promise { const storedWorkspaceDataSource = DataSourceStorage.getDataSource(workspaceId); @@ -23,10 +26,14 @@ export class WorkspaceDatasourceFactory { } const dataSourceMetadata = - await this.dataSourceService.getLastDataSourceMetadataFromWorkspaceIdOrFail( + await this.dataSourceService.getLastDataSourceMetadataFromWorkspaceId( workspaceId, ); + if (!dataSourceMetadata) { + return null; + } + const workspaceDataSource = new WorkspaceDataSource({ url: dataSourceMetadata.url ?? diff --git a/packages/twenty-server/src/engine/twenty-orm/twenty-orm.manager.ts b/packages/twenty-server/src/engine/twenty-orm/twenty-orm.manager.ts index caaa4c216..c2e12ea45 100644 --- a/packages/twenty-server/src/engine/twenty-orm/twenty-orm.manager.ts +++ b/packages/twenty-server/src/engine/twenty-orm/twenty-orm.manager.ts @@ -35,6 +35,11 @@ export class TwentyORMManager { entities, workspaceId, ); + + if (!workspaceDataSource) { + throw new Error('Workspace data source not found'); + } + const entitySchema = this.entitySchemaFactory.create(entityClass); return workspaceDataSource.getRepository(entitySchema);