import { Injectable, Type } from '@nestjs/common'; import { ObjectLiteral } from 'typeorm'; import { WorkspaceDatasourceFactory } from 'src/engine/twenty-orm/factories/workspace-datasource.factory'; import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository'; import { convertClassNameToObjectMetadataName } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/convert-class-to-object-metadata-name.util'; @Injectable() export class TwentyORMGlobalManager { constructor( private readonly workspaceDataSourceFactory: WorkspaceDatasourceFactory, ) {} async getRepositoryForWorkspace( workspaceId: string, workspaceEntity: Type, options?: { shouldBypassPermissionChecks?: boolean; shouldFailIfMetadataNotFound?: boolean; }, ): Promise>; async getRepositoryForWorkspace( workspaceId: string, objectMetadataName: string, options?: { shouldBypassPermissionChecks?: boolean; shouldFailIfMetadataNotFound?: boolean; }, ): Promise>; async getRepositoryForWorkspace( workspaceId: string, workspaceEntityOrobjectMetadataName: Type | string, options: { shouldBypassPermissionChecks?: boolean; shouldFailIfMetadataNotFound?: boolean; } = { shouldBypassPermissionChecks: false, shouldFailIfMetadataNotFound: true, }, ): Promise> { let objectMetadataName: string; if (typeof workspaceEntityOrobjectMetadataName === 'string') { objectMetadataName = workspaceEntityOrobjectMetadataName; } else { objectMetadataName = convertClassNameToObjectMetadataName( workspaceEntityOrobjectMetadataName.name, ); } const workspaceDataSource = await this.workspaceDataSourceFactory.create( workspaceId, null, options.shouldFailIfMetadataNotFound, ); const repository = workspaceDataSource.getRepository( objectMetadataName, options.shouldBypassPermissionChecks, ); return repository; } async getDataSourceForWorkspace( workspaceId: string, shouldFailIfMetadataNotFound = true, ) { return await this.workspaceDataSourceFactory.create( workspaceId, null, shouldFailIfMetadataNotFound, ); } async destroyDataSourceForWorkspace(workspaceId: string) { await this.workspaceDataSourceFactory.destroy(workspaceId); } }