diff --git a/packages/twenty-server/src/app.module.ts b/packages/twenty-server/src/app.module.ts index 0e742c750b..a9d65ec525 100644 --- a/packages/twenty-server/src/app.module.ts +++ b/packages/twenty-server/src/app.module.ts @@ -23,7 +23,6 @@ import { RestApiModule } from 'src/engine/api/rest/rest-api.module'; import { WorkspaceAuthContextMiddleware } from 'src/engine/core-modules/auth/middlewares/workspace-auth-context.middleware'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { DataloaderModule } from 'src/engine/dataloaders/dataloader.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module'; import { GraphQLHydrateRequestFromTokenMiddleware } from 'src/engine/middlewares/graphql-hydrate-request-from-token.middleware'; import { MiddlewareModule } from 'src/engine/middlewares/middleware.module'; @@ -68,7 +67,6 @@ const MIGRATED_REST_METHODS = [ MetadataGraphQLApiModule, RestApiModule, McpModule, - DataSourceModule, MiddlewareModule, WorkspaceMetadataVersionModule, // I18n module for translations diff --git a/packages/twenty-server/src/database/commands/command-runners/workspace-iterator.module.ts b/packages/twenty-server/src/database/commands/command-runners/workspace-iterator.module.ts index 355640af9e..3762b0fab7 100644 --- a/packages/twenty-server/src/database/commands/command-runners/workspace-iterator.module.ts +++ b/packages/twenty-server/src/database/commands/command-runners/workspace-iterator.module.ts @@ -3,10 +3,9 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { WorkspaceIteratorService } from 'src/database/commands/command-runners/workspace-iterator.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; @Module({ - imports: [TypeOrmModule.forFeature([WorkspaceEntity]), DataSourceModule], + imports: [TypeOrmModule.forFeature([WorkspaceEntity])], providers: [WorkspaceIteratorService], exports: [WorkspaceIteratorService], }) diff --git a/packages/twenty-server/src/database/commands/command-runners/workspace-iterator.service.ts b/packages/twenty-server/src/database/commands/command-runners/workspace-iterator.service.ts index d5add51758..d3cc311b35 100644 --- a/packages/twenty-server/src/database/commands/command-runners/workspace-iterator.service.ts +++ b/packages/twenty-server/src/database/commands/command-runners/workspace-iterator.service.ts @@ -2,12 +2,11 @@ import { Injectable, Logger } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import chalk from 'chalk'; -import { isDefined } from 'twenty-shared/utils'; +import { isNonEmptyString } from '@sniptt/guards'; import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; import { In, MoreThanOrEqual, Repository } from 'typeorm'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { GlobalWorkspaceDataSource } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-datasource'; import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager'; import { buildSystemAuthContext } from 'src/engine/twenty-orm/utils/build-system-auth-context.util'; @@ -51,7 +50,6 @@ export class WorkspaceIteratorService { @InjectRepository(WorkspaceEntity) private readonly workspaceRepository: Repository, private readonly globalWorkspaceOrmManager: GlobalWorkspaceOrmManager, - private readonly dataSourceService: DataSourceService, ) {} async iterate(args: WorkspaceIteratorArgs): Promise { @@ -81,12 +79,12 @@ export class WorkspaceIteratorService { await this.globalWorkspaceOrmManager.executeInWorkspaceContext( async () => { - const workspaceHasDataSource = - await this.dataSourceService.getLastDataSourceMetadataFromWorkspaceId( - workspaceId, - ); + const workspace = await this.workspaceRepository.findOne({ + select: ['databaseSchema'], + where: { id: workspaceId }, + }); - const dataSource = isDefined(workspaceHasDataSource) + const dataSource = isNonEmptyString(workspace?.databaseSchema) ? await this.globalWorkspaceOrmManager.getGlobalWorkspaceDataSource() : undefined; diff --git a/packages/twenty-server/src/database/commands/database-command.module.ts b/packages/twenty-server/src/database/commands/database-command.module.ts index 0b9149c4fb..9adad0bb16 100644 --- a/packages/twenty-server/src/database/commands/database-command.module.ts +++ b/packages/twenty-server/src/database/commands/database-command.module.ts @@ -28,7 +28,6 @@ import { TwentyConfigModule } from 'src/engine/core-modules/twenty-config/twenty import { UpgradeModule } from 'src/engine/core-modules/upgrade/upgrade.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataModule } from 'src/engine/metadata-modules/field-metadata/field-metadata.module'; import { ObjectMetadataModule } from 'src/engine/metadata-modules/object-metadata/object-metadata.module'; import { TrashCleanupModule } from 'src/engine/trash-cleanup/trash-cleanup.module'; @@ -62,7 +61,6 @@ import { AutomatedTriggerModule } from 'src/modules/workflow/workflow-trigger/au ObjectMetadataModule, DevSeederModule, WorkspaceManagerModule, - DataSourceModule, WorkspaceCacheStorageModule, ApiKeyModule, FeatureFlagModule, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-21/1-21-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-21/1-21-upgrade-version-command.module.ts index b06a883378..3527c06b6d 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-21/1-21-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-21/1-21-upgrade-version-command.module.ts @@ -23,7 +23,6 @@ import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.ent import { CalendarChannelEntity } from 'src/engine/metadata-modules/calendar-channel/entities/calendar-channel.entity'; import { ConnectedAccountEntity } from 'src/engine/metadata-modules/connected-account/entities/connected-account.entity'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataModule } from 'src/engine/metadata-modules/field-metadata/field-metadata.module'; import { MessageChannelEntity } from 'src/engine/metadata-modules/message-channel/entities/message-channel.entity'; import { MessageFolderEntity } from 'src/engine/metadata-modules/message-folder/entities/message-folder.entity'; @@ -42,7 +41,6 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace MessageFolderEntity, UserWorkspaceEntity, ]), - DataSourceModule, FieldMetadataModule, WorkspaceCacheModule, ApplicationModule, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-22/1-22-instance-command-fast-1775804361516-drop-object-metadata-data-source-fk.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-22/1-22-instance-command-fast-1775804361516-drop-object-metadata-data-source-fk.ts new file mode 100644 index 0000000000..c7a6b9748e --- /dev/null +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-22/1-22-instance-command-fast-1775804361516-drop-object-metadata-data-source-fk.ts @@ -0,0 +1,33 @@ +import { QueryRunner } from 'typeorm'; + +import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator'; +import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface'; + +@RegisteredInstanceCommand('1.22.0', 1775804361516) +export class DropObjectMetadataDataSourceFkFastInstanceCommand + implements FastInstanceCommand +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + 'ALTER TABLE "core"."objectMetadata" DROP CONSTRAINT "FK_0b19dd17369574578bc18c405b2"', + ); + await queryRunner.query( + 'DROP INDEX "core"."IDX_OBJECT_METADATA_DATA_SOURCE_ID"', + ); + await queryRunner.query( + 'ALTER TABLE "core"."objectMetadata" ALTER COLUMN "dataSourceId" DROP NOT NULL', + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + 'ALTER TABLE "core"."objectMetadata" ALTER COLUMN "dataSourceId" SET NOT NULL', + ); + await queryRunner.query( + 'CREATE INDEX "IDX_OBJECT_METADATA_DATA_SOURCE_ID" ON "core"."objectMetadata" ("dataSourceId")', + ); + await queryRunner.query( + 'ALTER TABLE "core"."objectMetadata" ADD CONSTRAINT "FK_0b19dd17369574578bc18c405b2" FOREIGN KEY ("dataSourceId") REFERENCES "core"."dataSource"("id") ON DELETE CASCADE ON UPDATE NO ACTION', + ); + } +} diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts index d5da5596c2..b7520218e5 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts @@ -7,6 +7,7 @@ import { AddPermissionFlagRoleIdIndexFastInstanceCommand } from 'src/database/co import { AddWorkspaceIdToIndirectEntitiesFastInstanceCommand } from 'src/database/commands/upgrade-version-command/1-22/1-22-instance-command-fast-1775758621017-add-workspace-id-to-indirect-entities'; import { BackfillWorkspaceIdOnIndirectEntitiesSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/1-22/1-22-instance-command-slow-1775758621018-backfill-workspace-id-on-indirect-entities'; import { AddWorkspaceIdIndexesAndFksFastInstanceCommand } from 'src/database/commands/upgrade-version-command/1-22/1-22-instance-command-fast-1775761294897-add-workspace-id-indexes-and-fks-to-indirect-entities'; +import { DropObjectMetadataDataSourceFkFastInstanceCommand } from 'src/database/commands/upgrade-version-command/1-22/1-22-instance-command-fast-1775804361516-drop-object-metadata-data-source-fk'; export const INSTANCE_COMMANDS = [ AddViewFieldGroupIdIndexOnViewFieldFastInstanceCommand, @@ -16,4 +17,5 @@ export const INSTANCE_COMMANDS = [ AddWorkspaceIdToIndirectEntitiesFastInstanceCommand, BackfillWorkspaceIdOnIndirectEntitiesSlowInstanceCommand, AddWorkspaceIdIndexesAndFksFastInstanceCommand, + DropObjectMetadataDataSourceFkFastInstanceCommand, ]; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade-version-command.module.ts index 6cf385f53a..d4bf518465 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade-version-command.module.ts @@ -6,14 +6,12 @@ import { V1_22_UpgradeVersionCommandModule } from 'src/database/commands/upgrade import { UpgradeCommand } from 'src/database/commands/upgrade-version-command/upgrade.command'; import { CoreEngineVersionModule } from 'src/engine/core-engine-version/core-engine-version.module'; import { UpgradeModule } from 'src/engine/core-modules/upgrade/upgrade.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceVersionModule } from 'src/engine/workspace-manager/workspace-version/workspace-version.module'; @Module({ imports: [ V1_21_UpgradeVersionCommandModule, V1_22_UpgradeVersionCommandModule, - DataSourceModule, CoreEngineVersionModule, UpgradeModule, WorkspaceVersionModule, diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-graphql-schema-sdl/workspace-graphql-schema-sdl.module.ts b/packages/twenty-server/src/engine/api/graphql/workspace-graphql-schema-sdl/workspace-graphql-schema-sdl.module.ts index bdcd1a3b26..931d7b12b5 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-graphql-schema-sdl/workspace-graphql-schema-sdl.module.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-graphql-schema-sdl/workspace-graphql-schema-sdl.module.ts @@ -3,8 +3,6 @@ import { Module } from '@nestjs/common'; import { ScalarsExplorerService } from 'src/engine/api/graphql/services/scalars-explorer.service'; import { WorkspaceSchemaBuilderModule } from 'src/engine/api/graphql/workspace-schema-builder/workspace-schema-builder.module'; import { WorkspaceGraphqlSchemaSDLService } from 'src/engine/api/graphql/workspace-graphql-schema-sdl/workspace-graphql-schema-sdl.service'; -import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/workspace-cache-storage.module'; @@ -13,8 +11,6 @@ import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/ WorkspaceSchemaBuilderModule, WorkspaceCacheStorageModule, WorkspaceManyOrAllFlatEntityMapsCacheModule, - FeatureFlagModule, - DataSourceModule, ], providers: [WorkspaceGraphqlSchemaSDLService, ScalarsExplorerService], exports: [WorkspaceGraphqlSchemaSDLService], diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-graphql-schema-sdl/workspace-graphql-schema-sdl.service.ts b/packages/twenty-server/src/engine/api/graphql/workspace-graphql-schema-sdl/workspace-graphql-schema-sdl.service.ts index c6482ef8fc..625eeaaa64 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-graphql-schema-sdl/workspace-graphql-schema-sdl.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-graphql-schema-sdl/workspace-graphql-schema-sdl.service.ts @@ -2,14 +2,11 @@ import { Injectable } from '@nestjs/common'; import { isNonEmptyString } from '@sniptt/guards'; import { printSchema } from 'graphql'; -import { FeatureFlagKey } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { ScalarsExplorerService } from 'src/engine/api/graphql/services/scalars-explorer.service'; import { WorkspaceGraphQLSchemaGenerator } from 'src/engine/api/graphql/workspace-schema-builder/workspace-graphql-schema.factory'; -import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FlatWorkspace } from 'src/engine/core-modules/workspace/types/flat-workspace.type'; -import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { FlatEntityMapsException, FlatEntityMapsExceptionCode, @@ -37,28 +34,13 @@ export class WorkspaceGraphqlSchemaSDLService { private readonly workspaceGraphQLSchemaGenerator: WorkspaceGraphQLSchemaGenerator, private readonly workspaceCacheStorageService: WorkspaceCacheStorageService, private readonly workspaceManyOrAllFlatEntityMapsCacheService: WorkspaceManyOrAllFlatEntityMapsCacheService, - private readonly featureFlagService: FeatureFlagService, - private readonly dataSourceService: DataSourceService, ) {} async getOrComputeSchemaSDL( workspace: FlatWorkspace, applicationId?: string, ): Promise { - const isDataSourceMigrated = await this.featureFlagService.isFeatureEnabled( - FeatureFlagKey.IS_DATASOURCE_MIGRATED, - workspace.id, - ); - - const hasSchema = isDataSourceMigrated - ? isNonEmptyString(workspace.databaseSchema) - : ( - await this.dataSourceService.getDataSourcesMetadataFromWorkspaceId( - workspace.id, - ) - ).length > 0; - - if (!hasSchema) { + if (!isNonEmptyString(workspace.databaseSchema)) { return null; } diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts b/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts index 78c849fa99..5221174eb6 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts @@ -16,7 +16,6 @@ import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { CoreEntityCacheModule } from 'src/engine/core-entity-cache/core-entity-cache.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache.module'; @@ -31,7 +30,6 @@ import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache ApplicationEntity, ]), TypeORMModule, - DataSourceModule, PermissionsModule, WorkspaceCacheModule, CoreEntityCacheModule, diff --git a/packages/twenty-server/src/engine/core-modules/billing/billing.module.ts b/packages/twenty-server/src/engine/core-modules/billing/billing.module.ts index 3494a98a2e..8675b75982 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/billing.module.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/billing.module.ts @@ -42,7 +42,6 @@ import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AiBillingModule } from 'src/engine/metadata-modules/ai/ai-billing/ai-billing.module'; import { AiModelsModule } from 'src/engine/metadata-modules/ai/ai-models/ai-models.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @Module({ @@ -66,7 +65,6 @@ import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permi UserWorkspaceEntity, FeatureFlagEntity, ]), - DataSourceModule, MetricsModule, EnterpriseModule, WorkspaceIteratorModule, diff --git a/packages/twenty-server/src/engine/core-modules/message-queue/jobs.module.ts b/packages/twenty-server/src/engine/core-modules/message-queue/jobs.module.ts index 2aee51b776..87b88a617d 100644 --- a/packages/twenty-server/src/engine/core-modules/message-queue/jobs.module.ts +++ b/packages/twenty-server/src/engine/core-modules/message-queue/jobs.module.ts @@ -21,7 +21,6 @@ import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.ent import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; import { AiAgentMonitorModule } from 'src/engine/metadata-modules/ai/ai-agent-monitor/ai-agent-monitor.module'; import { AiChatModule } from 'src/engine/metadata-modules/ai/ai-chat/ai-chat.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { LogicFunctionModule } from 'src/engine/metadata-modules/logic-function/logic-function.module'; import { NavigationMenuItemModule } from 'src/engine/metadata-modules/navigation-menu-item/navigation-menu-item.module'; import { ObjectMetadataModule } from 'src/engine/metadata-modules/object-metadata/object-metadata.module'; @@ -45,7 +44,6 @@ import { WorkflowModule } from 'src/modules/workflow/workflow.module'; @Module({ imports: [ TypeOrmModule.forFeature([WorkspaceEntity, BillingSubscriptionEntity]), - DataSourceModule, ObjectMetadataModule, TypeORMModule, UserModule, diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.module.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.module.ts index b8ae96a2aa..022d2faf58 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.module.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.module.ts @@ -18,7 +18,6 @@ import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/use import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationModule } from 'src/engine/core-modules/workspace-invitation/workspace-invitation.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; @@ -40,7 +39,6 @@ import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/works RoleValidationModule, NestjsQueryTypeOrmModule.forFeature([ObjectMetadataEntity]), TypeORMModule, - DataSourceModule, WorkspaceDataSourceModule, ApprovedAccessDomainModule, WorkspaceInvitationModule, diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.spec.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.spec.ts index 4805e451c0..7a134086cd 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.spec.ts @@ -19,7 +19,6 @@ import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/use import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; import { type WorkspaceEntity } 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 { PermissionsException } from 'src/engine/metadata-modules/permissions/permissions.exception'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; @@ -78,12 +77,6 @@ describe('UserWorkspaceService', () => { validateRoleAssignableToUsersOrThrow: jest.fn(), }, }, - { - provide: DataSourceService, - useValue: { - getLastDataSourceMetadataFromWorkspaceIdOrFail: jest.fn(), - }, - }, { provide: WorkspaceInvitationService, useValue: { diff --git a/packages/twenty-server/src/engine/core-modules/user/user.module.ts b/packages/twenty-server/src/engine/core-modules/user/user.module.ts index a0c6621b39..5af477c661 100644 --- a/packages/twenty-server/src/engine/core-modules/user/user.module.ts +++ b/packages/twenty-server/src/engine/core-modules/user/user.module.ts @@ -22,7 +22,6 @@ import { UserVarsModule } from 'src/engine/core-modules/user/user-vars/user-vars import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { UserResolver } from 'src/engine/core-modules/user/user.resolver'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { UserRoleModule } from 'src/engine/metadata-modules/user-role/user-role.module'; @@ -44,7 +43,6 @@ import { UserService } from './services/user.service'; resolvers: userAutoResolverOpts, }), NestjsQueryTypeOrmModule.forFeature([ObjectMetadataEntity]), - DataSourceModule, WorkspaceModule, OnboardingModule, TypeOrmModule.forFeature([KeyValuePairEntity, UserWorkspaceEntity]), diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts index dce4404dbf..c2f79435e7 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts @@ -34,7 +34,6 @@ import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.ent import { WorkspaceResolver } from 'src/engine/core-modules/workspace/workspace.resolver'; import { BillingDisabledGuard } from 'src/engine/guards/billing-disabled.guard'; import { AiAgentModule } from 'src/engine/metadata-modules/ai/ai-agent/ai-agent.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { ObjectMetadataModule } from 'src/engine/metadata-modules/object-metadata/object-metadata.module'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @@ -67,7 +66,6 @@ import { StandardObjectsPrefillModule } from 'src/engine/workspace-manager/stand UserWorkspaceModule, WorkspaceManagerModule, FeatureFlagModule, - DataSourceModule, OnboardingModule, WorkspaceDataSourceModule, TypeORMModule, diff --git a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.entity.ts b/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.entity.ts index 7ed45103a8..870f0a2717 100644 --- a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.entity.ts @@ -4,19 +4,16 @@ import { type DataSourceOptions, Entity, Index, - OneToMany, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; -import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceRelatedEntity } from 'src/engine/workspace-manager/types/workspace-related-entity'; export type DataSourceType = DataSourceOptions['type']; -// @deprecated - This entity is being deprecated in favor of storing -// databaseSchema directly on WorkspaceEntity. -// During the transition, writes go to both tables (dual-write). +// @deprecated - This entity is kept only to preserve the dataSource table. +// All code should use workspace.databaseSchema instead. @Entity('dataSource') @Index('IDX_DATA_SOURCE_WORKSPACE_ID_CREATED_AT', ['workspaceId', 'createdAt']) export class DataSourceEntity extends WorkspaceRelatedEntity { @@ -38,11 +35,6 @@ export class DataSourceEntity extends WorkspaceRelatedEntity { @Column({ default: false }) isRemote: boolean; - @OneToMany(() => ObjectMetadataEntity, (object) => object.dataSource, { - cascade: true, - }) - objects: ObjectMetadataEntity[]; - @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.exception.ts b/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.exception.ts deleted file mode 100644 index 1552cf8ab7..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.exception.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { type MessageDescriptor } from '@lingui/core'; -import { assertUnreachable } from 'twenty-shared/utils'; - -import { STANDARD_ERROR_MESSAGE } from 'src/engine/api/common/common-query-runners/errors/standard-error-message.constant'; -import { CustomException } from 'src/utils/custom-exception'; - -export enum DataSourceExceptionCode { - DATA_SOURCE_NOT_FOUND = 'DATA_SOURCE_NOT_FOUND', -} - -const getDataSourceExceptionUserFriendlyMessage = ( - code: DataSourceExceptionCode, -) => { - switch (code) { - case DataSourceExceptionCode.DATA_SOURCE_NOT_FOUND: - return STANDARD_ERROR_MESSAGE; - default: - assertUnreachable(code); - } -}; - -export class DataSourceException extends CustomException { - constructor( - message: string, - code: DataSourceExceptionCode, - { userFriendlyMessage }: { userFriendlyMessage?: MessageDescriptor } = {}, - ) { - super(message, code, { - userFriendlyMessage: - userFriendlyMessage ?? getDataSourceExceptionUserFriendlyMessage(code), - }); - } -} diff --git a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.module.ts b/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.module.ts deleted file mode 100644 index 196f829fa9..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; - -import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; - -import { DataSourceEntity } from './data-source.entity'; -import { DataSourceService } from './data-source.service'; - -@Module({ - imports: [TypeOrmModule.forFeature([DataSourceEntity, WorkspaceEntity])], - providers: [DataSourceService], - exports: [DataSourceService], -}) -export class DataSourceModule {} 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 deleted file mode 100644 index 28ca348083..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.service.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; - -import { type FindManyOptions, Repository } from 'typeorm'; - -import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { - DataSourceException, - DataSourceExceptionCode, -} from 'src/engine/metadata-modules/data-source/data-source.exception'; - -import { DataSourceEntity } from './data-source.entity'; - -// @deprecated - This service is being deprecated. During the transition, -// writes go to both the dataSource table and workspace table (dual-write). -// Reads should progressively migrate to use workspace.databaseSchema -// or the deterministic getWorkspaceSchemaName(workspaceId) utility. -@Injectable() -export class DataSourceService { - constructor( - @InjectRepository(DataSourceEntity) - private readonly dataSourceMetadataRepository: Repository, - @InjectRepository(WorkspaceEntity) - private readonly workspaceRepository: Repository, - ) {} - - async createDataSourceMetadata( - workspaceId: string, - workspaceSchema: string, - ): Promise { - const dataSource = await this.dataSourceMetadataRepository.findOne({ - where: { workspaceId }, - }); - - // Dual-write: always keep workspace.databaseSchema in sync - await this.workspaceRepository.update(workspaceId, { - databaseSchema: workspaceSchema, - }); - - if (dataSource) { - return dataSource; - } - - return this.dataSourceMetadataRepository.save({ - workspaceId, - schema: workspaceSchema, - }); - } - - // @deprecated - Use workspace.activationStatus or workspace.databaseSchema - // to check if a workspace has been initialized instead. - async getManyDataSourceMetadata( - options: FindManyOptions = {}, - ): Promise { - return this.dataSourceMetadataRepository.find(options); - } - - // @deprecated - Use workspace.databaseSchema or - // getWorkspaceSchemaName(workspaceId) instead. - async getDataSourcesMetadataFromWorkspaceId( - workspaceId: string, - ): Promise { - return this.dataSourceMetadataRepository.find({ - where: { workspaceId }, - order: { createdAt: 'DESC' }, - }); - } - - // @deprecated - Use workspace.databaseSchema or - // getWorkspaceSchemaName(workspaceId) instead. - async getLastDataSourceMetadataFromWorkspaceId( - workspaceId: string, - ): Promise { - return this.dataSourceMetadataRepository.findOne({ - where: { workspaceId }, - order: { createdAt: 'DESC' }, - }); - } - - // @deprecated - Use workspace.databaseSchema or - // getWorkspaceSchemaName(workspaceId) instead. - async getLastDataSourceMetadataFromWorkspaceIdOrFail( - workspaceId: string, - ): Promise { - try { - return this.dataSourceMetadataRepository.findOneOrFail({ - where: { workspaceId }, - order: { createdAt: 'DESC' }, - }); - } catch (error) { - throw new DataSourceException( - `Data source not found for workspace ${workspaceId}: ${error}`, - DataSourceExceptionCode.DATA_SOURCE_NOT_FOUND, - ); - } - } - - async delete(workspaceId: string): Promise { - await this.dataSourceMetadataRepository.delete({ workspaceId }); - - // Dual-write: clear workspace.databaseSchema on delete - await this.workspaceRepository.update(workspaceId, { - databaseSchema: null, - }); - } -} diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.module.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.module.ts index c443086d76..50fba41ca0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.module.ts @@ -12,7 +12,6 @@ import { ActorModule } from 'src/engine/core-modules/actor/actor.module'; import { ApplicationModule } from 'src/engine/core-modules/application/application.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto'; import { FieldMetadataResolver } from 'src/engine/metadata-modules/field-metadata/field-metadata.resolver'; import { FieldMetadataGraphqlApiExceptionInterceptor } from 'src/engine/metadata-modules/field-metadata/interceptors/field-metadata-graphql-api-exception.interceptor'; @@ -49,7 +48,6 @@ import { UpdateFieldInput } from './dtos/update-field.input'; WorkspaceMetadataVersionModule, WorkspaceCacheStorageModule, ObjectMetadataModule, - DataSourceModule, TypeORMModule, ActorModule, ApplicationModule, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-foreign-key.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-foreign-key.constant.ts index 28555ab842..ca4a67b7cf 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-foreign-key.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-foreign-key.constant.ts @@ -79,7 +79,6 @@ export const ALL_MANY_TO_ONE_METADATA_FOREIGN_KEY = { }, }, objectMetadata: { - dataSource: null, workspace: null, application: null, }, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-relations.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-relations.constant.ts index c267a86fcc..a9387777cb 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-relations.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-relations.constant.ts @@ -139,7 +139,6 @@ export const ALL_MANY_TO_ONE_METADATA_RELATIONS = { }, }, objectMetadata: { - dataSource: null, workspace: null, application: null, }, diff --git a/packages/twenty-server/src/engine/metadata-modules/metadata-engine.module.ts b/packages/twenty-server/src/engine/metadata-modules/metadata-engine.module.ts index b866a11b57..2cf191f506 100644 --- a/packages/twenty-server/src/engine/metadata-modules/metadata-engine.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/metadata-engine.module.ts @@ -8,7 +8,6 @@ import { AiGenerateTextModule } from 'src/engine/metadata-modules/ai/ai-generate import { CalendarChannelMetadataModule } from 'src/engine/metadata-modules/calendar-channel/calendar-channel-metadata.module'; import { ConnectedAccountMetadataModule } from 'src/engine/metadata-modules/connected-account/connected-account-metadata.module'; import { CommandMenuItemModule } from 'src/engine/metadata-modules/command-menu-item/command-menu-item.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataModule } from 'src/engine/metadata-modules/field-metadata/field-metadata.module'; import { FlatEntityMapsGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/flat-entity/filters/flat-entity-maps-graphql-api-exception.filter'; import { FrontComponentModule } from 'src/engine/metadata-modules/front-component/front-component.module'; @@ -30,7 +29,6 @@ import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/work @Module({ imports: [ - DataSourceModule, FieldMetadataModule, FrontComponentModule, ObjectMetadataModule, @@ -63,7 +61,6 @@ import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/work }, ], exports: [ - DataSourceModule, FieldMetadataModule, FrontComponentModule, ObjectMetadataModule, diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/create-object.input.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/create-object.input.ts index 4e0a316e68..8581bc7b2b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/create-object.input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/create-object.input.ts @@ -60,9 +60,6 @@ export class CreateObjectInput { @Field({ nullable: true }) color?: string; - @HideField() - dataSourceId: string; - @HideField() applicationId?: string; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts index cc6cc8c0b7..86ca3f3b1f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts @@ -2,8 +2,6 @@ import { Column, CreateDateColumn, Entity, - Index, - ManyToOne, OneToMany, PrimaryGeneratedColumn, type Relation, @@ -12,7 +10,6 @@ import { } from 'typeorm'; import { type WorkspaceEntityDuplicateCriteria } from 'src/engine/api/graphql/workspace-query-builder/types/workspace-entity-duplicate-criteria.type'; -import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { type ObjectStandardOverridesDTO } from 'src/engine/metadata-modules/object-metadata/dtos/object-standard-overrides.dto'; @@ -31,7 +28,6 @@ import { type JsonbProperty } from 'src/engine/workspace-manager/workspace-migra 'namePlural', 'workspaceId', ]) -@Index('IDX_OBJECT_METADATA_DATA_SOURCE_ID', ['dataSourceId']) export class ObjectMetadataEntity extends SyncableEntity implements Required @@ -39,7 +35,8 @@ export class ObjectMetadataEntity @PrimaryGeneratedColumn('uuid') id: string; - @Column({ nullable: false, type: 'uuid' }) + // @deprecated - FK dropped, column kept for data preservation only + @Column({ nullable: true, type: 'uuid' }) dataSourceId: string; @Column({ nullable: false }) @@ -120,11 +117,6 @@ export class ObjectMetadataEntity }) indexMetadatas: Relation; - @ManyToOne(() => DataSourceEntity, (dataSource) => dataSource.objects, { - onDelete: 'CASCADE', - }) - dataSource: Relation; - @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts index 8ed53ce5cb..fc92b225a8 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts @@ -13,7 +13,6 @@ import { ApplicationModule } from 'src/engine/core-modules/application/applicati import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FlatFieldMetadataTypeValidatorService } from 'src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service'; @@ -50,7 +49,6 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace ]), TypeOrmModule.forFeature([FeatureFlagEntity, ViewEntity]), ApplicationModule, - DataSourceModule, WorkspaceMetadataVersionModule, IndexMetadataModule, PermissionsModule, diff --git a/packages/twenty-server/src/engine/middlewares/middleware.module.ts b/packages/twenty-server/src/engine/middlewares/middleware.module.ts index ac6b3cd1f0..3d8adaa973 100644 --- a/packages/twenty-server/src/engine/middlewares/middleware.module.ts +++ b/packages/twenty-server/src/engine/middlewares/middleware.module.ts @@ -1,17 +1,13 @@ import { Module } from '@nestjs/common'; import { TokenModule } from 'src/engine/core-modules/auth/token/token.module'; -import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { MiddlewareService } from 'src/engine/middlewares/middleware.service'; import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/workspace-cache-storage.module'; @Module({ imports: [ - DataSourceModule, - FeatureFlagModule, WorkspaceCacheStorageModule, WorkspaceManyOrAllFlatEntityMapsCacheModule, TokenModule, diff --git a/packages/twenty-server/src/engine/middlewares/middleware.service.ts b/packages/twenty-server/src/engine/middlewares/middleware.service.ts index 9cd710ecd4..8e365ccfef 100644 --- a/packages/twenty-server/src/engine/middlewares/middleware.service.ts +++ b/packages/twenty-server/src/engine/middlewares/middleware.service.ts @@ -2,7 +2,6 @@ import { Injectable } from '@nestjs/common'; import { isNonEmptyString } from '@sniptt/guards'; import { type Request, type Response } from 'express'; -import { FeatureFlagKey } from 'twenty-shared/types'; import { type APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared/translations'; import { isDefined } from 'twenty-shared/utils'; @@ -11,10 +10,8 @@ import { AuthGraphqlApiExceptionFilter } from 'src/engine/core-modules/auth/filt import { AccessTokenService } from 'src/engine/core-modules/auth/token/services/access-token.service'; import { getAuthExceptionRestStatus } from 'src/engine/core-modules/auth/utils/get-auth-exception-rest-status.util'; import { ExceptionHandlerService } from 'src/engine/core-modules/exception-handler/exception-handler.service'; -import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { ErrorCode } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; -import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { INTERNAL_SERVER_ERROR } from 'src/engine/middlewares/constants/default-error-message.constant'; import { bindDataToRequestObject } from 'src/engine/utils/bind-data-to-request-object.util'; @@ -31,8 +28,6 @@ export class MiddlewareService { private readonly accessTokenService: AccessTokenService, private readonly workspaceStorageCacheService: WorkspaceCacheStorageService, private readonly flatEntityMapsCacheService: WorkspaceManyOrAllFlatEntityMapsCacheService, - private readonly dataSourceService: DataSourceService, - private readonly featureFlagService: FeatureFlagService, private readonly exceptionHandlerService: ExceptionHandlerService, private readonly jwtWrapperService: JwtWrapperService, ) {} @@ -114,20 +109,7 @@ export class MiddlewareService { throw new Error('No data sources found'); } - const isDataSourceMigrated = await this.featureFlagService.isFeatureEnabled( - FeatureFlagKey.IS_DATASOURCE_MIGRATED, - data.workspace.id, - ); - - const hasSchema = isDataSourceMigrated - ? isNonEmptyString(data.workspace.databaseSchema) - : ( - await this.dataSourceService.getDataSourcesMetadataFromWorkspaceId( - data.workspace.id, - ) - ).length > 0; - - if (!hasSchema) { + if (!isNonEmptyString(data.workspace.databaseSchema)) { throw new Error('No data sources found'); } diff --git a/packages/twenty-server/src/engine/twenty-orm/global-workspace-datasource/global-workspace-datasource.module.ts b/packages/twenty-server/src/engine/twenty-orm/global-workspace-datasource/global-workspace-datasource.module.ts index 6b827a0683..3b64e3050c 100644 --- a/packages/twenty-server/src/engine/twenty-orm/global-workspace-datasource/global-workspace-datasource.module.ts +++ b/packages/twenty-server/src/engine/twenty-orm/global-workspace-datasource/global-workspace-datasource.module.ts @@ -3,7 +3,6 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { TwentyConfigModule } from 'src/engine/core-modules/twenty-config/twenty-config.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -27,7 +26,6 @@ import { WorkspaceEventEmitterModule } from 'src/engine/workspace-event-emitter/ ObjectMetadataEntity, FieldMetadataEntity, ]), - DataSourceModule, WorkspaceCacheStorageModule, WorkspaceManyOrAllFlatEntityMapsCacheModule, WorkspaceFeatureFlagsMapCacheModule, diff --git a/packages/twenty-server/src/engine/twenty-orm/twenty-orm.module.ts b/packages/twenty-server/src/engine/twenty-orm/twenty-orm.module.ts index d95c5db711..59d9e5c8ad 100644 --- a/packages/twenty-server/src/engine/twenty-orm/twenty-orm.module.ts +++ b/packages/twenty-server/src/engine/twenty-orm/twenty-orm.module.ts @@ -4,7 +4,6 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { TwentyConfigModule } from 'src/engine/core-modules/twenty-config/twenty-config.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @@ -23,7 +22,6 @@ import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache RoleTargetEntity, WorkspaceEntity, ]), - DataSourceModule, WorkspaceCacheStorageModule, WorkspaceManyOrAllFlatEntityMapsCacheModule, PermissionsModule, diff --git a/packages/twenty-server/src/engine/workspace-datasource/workspace-datasource.module.ts b/packages/twenty-server/src/engine/workspace-datasource/workspace-datasource.module.ts index e04fd085db..9df09d7172 100644 --- a/packages/twenty-server/src/engine/workspace-datasource/workspace-datasource.module.ts +++ b/packages/twenty-server/src/engine/workspace-datasource/workspace-datasource.module.ts @@ -2,19 +2,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; -import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceDataSourceService } from './workspace-datasource.service'; @Module({ - imports: [ - TypeOrmModule.forFeature([WorkspaceEntity]), - TypeORMModule, - FeatureFlagModule, - DataSourceModule, - ], + imports: [TypeOrmModule.forFeature([WorkspaceEntity]), TypeORMModule], exports: [WorkspaceDataSourceService], providers: [WorkspaceDataSourceService], }) diff --git a/packages/twenty-server/src/engine/workspace-datasource/workspace-datasource.service.ts b/packages/twenty-server/src/engine/workspace-datasource/workspace-datasource.service.ts index f9d316e32b..0044acc338 100644 --- a/packages/twenty-server/src/engine/workspace-datasource/workspace-datasource.service.ts +++ b/packages/twenty-server/src/engine/workspace-datasource/workspace-datasource.service.ts @@ -3,13 +3,10 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { msg } from '@lingui/core/macro'; import { isNonEmptyString } from '@sniptt/guards'; -import { FeatureFlagKey } from 'twenty-shared/types'; import { type DataSource, type EntityManager, Repository } from 'typeorm'; -import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { PermissionsException, PermissionsExceptionCode, @@ -27,8 +24,6 @@ export class WorkspaceDataSourceService { private readonly workspaceRepository: Repository, @InjectDataSource() private readonly coreDataSource: DataSource, - private readonly featureFlagService: FeatureFlagService, - private readonly dataSourceService: DataSourceService, private readonly twentyConfigService: TwentyConfigService, ) {} @@ -43,26 +38,12 @@ export class WorkspaceDataSourceService { } public async checkSchemaExists(workspaceId: string) { - const isDataSourceMigrated = await this.featureFlagService.isFeatureEnabled( - FeatureFlagKey.IS_DATASOURCE_MIGRATED, - workspaceId, - ); + const workspace = await this.workspaceRepository.findOne({ + select: ['databaseSchema'], + where: { id: workspaceId }, + }); - if (isDataSourceMigrated) { - const workspace = await this.workspaceRepository.findOne({ - select: ['databaseSchema'], - where: { id: workspaceId }, - }); - - return isNonEmptyString(workspace?.databaseSchema); - } - - const dataSources = - await this.dataSourceService.getDataSourcesMetadataFromWorkspaceId( - workspaceId, - ); - - return dataSources.length > 0; + return isNonEmptyString(workspace?.databaseSchema); } /** diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts index 0745151488..a63f672f45 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts @@ -9,7 +9,6 @@ import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature- import { SdkClientModule } from 'src/engine/core-modules/sdk-client/sdk-client.module'; import { FileStorageModule } from 'src/engine/core-modules/file-storage/file-storage.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataModule } from 'src/engine/metadata-modules/field-metadata/field-metadata.module'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -37,7 +36,6 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace WorkspaceDataSourceModule, WorkspaceCacheStorageModule, TypeORMModule, - DataSourceModule, RoleModule, RoleTargetModule, UserRoleModule, diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/metadata/services/dev-seeder-metadata.service.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/metadata/services/dev-seeder-metadata.service.ts index 23c212a6a2..0f21e7ad59 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/metadata/services/dev-seeder-metadata.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/metadata/services/dev-seeder-metadata.service.ts @@ -3,7 +3,6 @@ import { Injectable } from '@nestjs/common'; import { FieldMetadataType, RelationType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { type DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { FieldMetadataService } from 'src/engine/metadata-modules/field-metadata/services/field-metadata.service'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; @@ -195,11 +194,9 @@ export class DevSeederMetadataService { } public async seed({ - dataSourceMetadata, workspaceId, light = false, }: { - dataSourceMetadata: DataSourceEntity; workspaceId: string; light?: boolean; }) { @@ -207,7 +204,6 @@ export class DevSeederMetadataService { for (const obj of config.objects) { await this.seedCustomObject({ - dataSourceId: dataSourceMetadata.id, workspaceId, objectMetadataSeed: obj.seed, }); @@ -231,19 +227,14 @@ export class DevSeederMetadataService { } private async seedCustomObject({ - dataSourceId, workspaceId, objectMetadataSeed, }: { - dataSourceId: string; workspaceId: string; objectMetadataSeed: ObjectMetadataSeed; }): Promise { await this.objectMetadataService.createOneObject({ - createObjectInput: { - ...objectMetadataSeed, - dataSourceId, - }, + createObjectInput: objectMetadataSeed, workspaceId, }); } diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/metadata/types/object-metadata-seed.type.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/metadata/types/object-metadata-seed.type.ts index 28ab0b4a65..7361e6c7db 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/metadata/types/object-metadata-seed.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/metadata/types/object-metadata-seed.type.ts @@ -2,7 +2,7 @@ import { type CreateObjectInput } from 'src/engine/metadata-modules/object-metad export type ObjectMetadataSeed = Omit< CreateObjectInput, - 'workspaceId' | 'dataSourceId' | 'fields' + 'workspaceId' | 'fields' > & { skipNameField?: boolean; }; diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts index 5eb62b5043..c9245e0375 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts @@ -1,14 +1,14 @@ import { Injectable, Logger } from '@nestjs/common'; -import { InjectDataSource } from '@nestjs/typeorm'; +import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { ALL_METADATA_NAME } from 'twenty-shared/metadata'; -import { DataSource } from 'typeorm'; +import { DataSource, Repository } from 'typeorm'; import { ApplicationRegistrationService } from 'src/engine/core-modules/application/application-registration/application-registration.service'; import { ApplicationService } from 'src/engine/core-modules/application/application.service'; import { SdkClientGenerationService } from 'src/engine/core-modules/sdk-client/sdk-client-generation.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { getMetadataFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util'; import { getMetadataRelatedMetadataNames } from 'src/engine/metadata-modules/flat-entity/utils/get-metadata-related-metadata-names.util'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -33,7 +33,6 @@ export class DevSeederService { private readonly workspaceCacheStorageService: WorkspaceCacheStorageService, private readonly twentyConfigService: TwentyConfigService, private readonly workspaceDataSourceService: WorkspaceDataSourceService, - private readonly dataSourceService: DataSourceService, private readonly twentyStandardApplicationService: TwentyStandardApplicationService, private readonly devSeederMetadataService: DevSeederMetadataService, private readonly devSeederPermissionsService: DevSeederPermissionsService, @@ -44,6 +43,8 @@ export class DevSeederService { private readonly sdkClientGenerationService: SdkClientGenerationService, @InjectDataSource() private readonly coreDataSource: DataSource, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, ) {} public async seedDev( @@ -74,11 +75,9 @@ export class DevSeederService { ['flatApplicationMaps', 'featureFlagsMap'], ); - const dataSourceMetadata = - await this.dataSourceService.createDataSourceMetadata( - workspaceId, - schemaName, - ); + await this.workspaceRepository.update(workspaceId, { + databaseSchema: schemaName, + }); const { workspaceCustomFlatApplication, twentyStandardFlatApplication } = await this.applicationService.findWorkspaceTwentyStandardAndCustomApplicationOrThrow( @@ -101,7 +100,6 @@ export class DevSeederService { }); await this.devSeederMetadataService.seed({ - dataSourceMetadata, workspaceId, light, }); @@ -165,7 +163,7 @@ export class DevSeederService { ); await this.devSeederDataService.seed({ - schemaName: dataSourceMetadata.schema, + schemaName, workspaceId, featureFlags: featureFlagsMap, light, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts index 2d087e9fc0..2e441025a7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts @@ -10,7 +10,6 @@ import { UserVarsModule } from 'src/engine/core-modules/user/user-vars/user-vars import { UserModule } from 'src/engine/core-modules/user/user.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { CleanOnboardingWorkspacesCommand } from 'src/engine/workspace-manager/workspace-cleaner/commands/clean-onboarding-workspaces.command'; import { CleanOnboardingWorkspacesCronCommand } from 'src/engine/workspace-manager/workspace-cleaner/commands/clean-onboarding-workspaces.cron.command'; import { CleanSuspendedWorkspacesCommand } from 'src/engine/workspace-manager/workspace-cleaner/commands/clean-suspended-workspaces.command'; @@ -26,7 +25,6 @@ import { CleanerWorkspaceService } from 'src/engine/workspace-manager/workspace- BillingSubscriptionEntity, ]), WorkspaceModule, - DataSourceModule, UserVarsModule, UserModule, EmailModule, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-manager.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-manager.module.ts index 31557fc4be..9a73d768b8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-manager.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-manager.module.ts @@ -6,7 +6,6 @@ import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature- import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AiAgentModule } from 'src/engine/metadata-modules/ai/ai-agent/ai-agent.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { LogicFunctionEntity } from 'src/engine/metadata-modules/logic-function/logic-function.entity'; @@ -29,7 +28,6 @@ import { WorkspaceManagerService } from './workspace-manager.service'; WorkspaceMigrationModule, ObjectMetadataModule, DevSeederModule, - DataSourceModule, FeatureFlagModule, PermissionsModule, AiAgentModule, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-manager.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-manager.service.ts index cb218f9f36..d9165596c2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-manager.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-manager.service.ts @@ -14,7 +14,6 @@ import { } from 'src/engine/core-modules/sdk-client/jobs/generate-sdk-client.job'; import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { RoleService } from 'src/engine/metadata-modules/role/role.service'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; @@ -28,7 +27,6 @@ export class WorkspaceManagerService { constructor( private readonly workspaceDataSourceService: WorkspaceDataSourceService, - private readonly dataSourceService: DataSourceService, @InjectRepository(UserWorkspaceEntity) private readonly userWorkspaceRepository: Repository, private readonly roleService: RoleService, @@ -65,10 +63,9 @@ export class WorkspaceManagerService { const dataSourceMetadataCreationStart = performance.now(); - await this.dataSourceService.createDataSourceMetadata( - workspaceId, - schemaName, - ); + await this.workspaceRepository.update(workspaceId, { + databaseSchema: schemaName, + }); await this.applicationService.createTwentyStandardApplication({ workspaceId, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/constant/default-feature-flags.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/constant/default-feature-flags.ts index d5b155544d..8d0959b8ed 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/constant/default-feature-flags.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/constant/default-feature-flags.ts @@ -1,5 +1,3 @@ import { FeatureFlagKey } from 'twenty-shared/types'; -export const DEFAULT_FEATURE_FLAGS = [ - FeatureFlagKey.IS_DATASOURCE_MIGRATED, -] as const satisfies FeatureFlagKey[]; +export const DEFAULT_FEATURE_FLAGS = [] as const satisfies FeatureFlagKey[]; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/create-object-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/create-object-action-handler.service.ts index 421a1224fb..4c1e3e6c80 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/create-object-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/create-object-action-handler.service.ts @@ -4,7 +4,6 @@ import { v4 } from 'uuid'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { ALL_METADATA_ENTITY_BY_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-entity-by-metadata-name.constant'; import { isCompositeFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-composite-flat-field-metadata.util'; import { isEnumFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-enum-flat-field-metadata.util'; @@ -42,19 +41,9 @@ export class CreateObjectActionHandlerService extends WorkspaceMigrationRunnerAc override async transpileUniversalActionToFlatAction( context: WorkspaceMigrationActionRunnerArgs, ): Promise { - const { action, queryRunner, workspaceId, allFlatEntityMaps } = context; + const { action, workspaceId, allFlatEntityMaps } = context; const { fieldIdByUniversalIdentifier, id: providedObjectId } = action; - const dataSourceRepository = - queryRunner.manager.getRepository(DataSourceEntity); - - const lastDataSourceMetadata = await dataSourceRepository.findOneOrFail({ - where: { - workspaceId, - }, - order: { createdAt: 'DESC' }, - }); - const allFieldIdToBeCreatedInActionByUniversalIdentifierMap = new Map< string, string @@ -77,7 +66,6 @@ export class CreateObjectActionHandlerService extends WorkspaceMigrationRunnerAc allFieldIdToBeCreatedInActionByUniversalIdentifierMap, allFlatEntityMaps, context, - dataSourceId: lastDataSourceMetadata.id, generatedId: providedObjectId ?? v4(), universalFlatObjectMetadata: action.flatEntity, }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/utils/from-universal-flat-object-metadata-to-flat-object-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/utils/from-universal-flat-object-metadata-to-flat-object-metadata.util.ts index a266013791..15abb65fda 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/utils/from-universal-flat-object-metadata-to-flat-object-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/utils/from-universal-flat-object-metadata-to-flat-object-metadata.util.ts @@ -20,7 +20,6 @@ export type FromUniversalFlatObjectMetadataToFlatObjectMetadataArgs = { WorkspaceMigrationActionRunnerArgs, 'workspaceId' | 'flatApplication' >; - dataSourceId: string; }; const findFieldMetadataIdInCreateObjectContext = ({ @@ -49,7 +48,6 @@ const findFieldMetadataIdInCreateObjectContext = ({ export const fromUniversalFlatObjectMetadataToFlatObjectMetadata = ({ universalFlatObjectMetadata, - dataSourceId, generatedId, allFlatEntityMaps, allFieldIdToBeCreatedInActionByUniversalIdentifierMap, @@ -57,9 +55,7 @@ export const fromUniversalFlatObjectMetadataToFlatObjectMetadata = ({ flatApplication: { id: applicationId }, workspaceId, }, -}: FromUniversalFlatObjectMetadataToFlatObjectMetadataArgs): FlatObjectMetadata & { - dataSourceId: string; -} => { +}: FromUniversalFlatObjectMetadataToFlatObjectMetadataArgs): FlatObjectMetadata => { const { universalIdentifier, applicationUniversalIdentifier, @@ -107,7 +103,6 @@ export const fromUniversalFlatObjectMetadataToFlatObjectMetadata = ({ return { ...restProperties, - dataSourceId, id: generatedId, workspaceId, applicationId, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/workspace-migration-runner.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/workspace-migration-runner.module.ts index bdf7cafcb2..2812a3c067 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/workspace-migration-runner.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/workspace-migration-runner.module.ts @@ -6,7 +6,6 @@ import { WorkspaceIteratorModule } from 'src/database/commands/command-runners/w import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module'; import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/workspace-cache-storage.module'; @@ -20,7 +19,6 @@ import { WorkspaceMigrationRunnerService } from 'src/engine/workspace-manager/wo imports: [ FeatureFlagModule, TypeORMModule, - DataSourceModule, WorkspaceMetadataVersionModule, WorkspaceSchemaMigrationRunnerActionHandlersModule, WorkspaceManyOrAllFlatEntityMapsCacheModule, diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/calendar-event-import-manager.module.ts b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/calendar-event-import-manager.module.ts index ac8910d1cf..c8dfde5fd9 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/calendar-event-import-manager.module.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/calendar-event-import-manager.module.ts @@ -6,7 +6,6 @@ import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature- import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { CalendarChannelEntity } from 'src/engine/metadata-modules/calendar-channel/entities/calendar-channel.entity'; import { ConnectedAccountEntity } from 'src/engine/metadata-modules/connected-account/entities/connected-account.entity'; @@ -50,7 +49,6 @@ import { RefreshTokensManagerModule } from 'src/modules/connected-account/refres TypeOrmModule.forFeature([ FeatureFlagEntity, WorkspaceEntity, - DataSourceEntity, CalendarChannelEntity, ConnectedAccountEntity, UserWorkspaceEntity, diff --git a/packages/twenty-server/src/modules/messaging/message-cleaner/messaging-message-cleaner.module.ts b/packages/twenty-server/src/modules/messaging/message-cleaner/messaging-message-cleaner.module.ts index 2c6505bb85..d89dab1c24 100644 --- a/packages/twenty-server/src/modules/messaging/message-cleaner/messaging-message-cleaner.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-cleaner/messaging-message-cleaner.module.ts @@ -4,7 +4,6 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { WorkspaceIteratorModule } from 'src/database/commands/command-runners/workspace-iterator.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { MessageChannelEntity } from 'src/engine/metadata-modules/message-channel/entities/message-channel.entity'; import { MessagingCommonModule } from 'src/modules/messaging/common/messaging-common.module'; import { MessagingMessageCleanerRemoveOrphansCommand } from 'src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command'; @@ -19,7 +18,6 @@ import { MessagingMessageCleanerService } from 'src/modules/messaging/message-cl @Module({ imports: [ TypeOrmModule.forFeature([WorkspaceEntity]), - DataSourceModule, FeatureFlagModule, MessagingCommonModule, TypeOrmModule.forFeature([MessageChannelEntity]), diff --git a/packages/twenty-server/src/modules/messaging/message-folder-manager/messaging-folder-sync-manager.module.ts b/packages/twenty-server/src/modules/messaging/message-folder-manager/messaging-folder-sync-manager.module.ts index 11238af4c4..ce9bf2f9db 100644 --- a/packages/twenty-server/src/modules/messaging/message-folder-manager/messaging-folder-sync-manager.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-folder-manager/messaging-folder-sync-manager.module.ts @@ -3,7 +3,6 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { MessageFolderEntity } from 'src/engine/metadata-modules/message-folder/entities/message-folder.entity'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; import { OAuth2ClientManagerModule } from 'src/modules/connected-account/oauth2-client-manager/oauth2-client-manager.module'; @@ -20,7 +19,6 @@ import { MessagingMicrosoftDriverModule } from 'src/modules/messaging/message-im imports: [ FeatureFlagModule, WorkspaceDataSourceModule, - DataSourceModule, TypeOrmModule.forFeature([WorkspaceEntity, MessageFolderEntity]), OAuth2ClientManagerModule, MessagingGmailDriverModule, diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-messages-import.cron.job.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-messages-import.cron.job.ts index f657b6fd52..6e884052b7 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-messages-import.cron.job.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-messages-import.cron.job.ts @@ -13,10 +13,6 @@ import { Processor } from 'src/engine/core-modules/message-queue/decorators/proc import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { - DataSourceException, - DataSourceExceptionCode, -} from 'src/engine/metadata-modules/data-source/data-source.exception'; import { MessagingMessagesImportJob, type MessagingMessagesImportJobData, @@ -81,9 +77,8 @@ export class MessagingMessagesImportCronJob { id: activeWorkspace.id, }, }); - throw new DataSourceException( + throw new Error( 'Workspace schema not found while the workspace is still active', - DataSourceExceptionCode.DATA_SOURCE_NOT_FOUND, ); } } else { diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/messaging-import-manager.module.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/messaging-import-manager.module.ts index e2ca4dd292..0beda46718 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/messaging-import-manager.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/messaging-import-manager.module.ts @@ -4,7 +4,6 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { MessageChannelEntity } from 'src/engine/metadata-modules/message-channel/entities/message-channel.entity'; import { MessageFolderEntity } from 'src/engine/metadata-modules/message-folder/entities/message-folder.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -65,7 +64,6 @@ import { MessagingMonitoringModule } from 'src/modules/messaging/monitoring/mess MessagingCommonModule, TypeOrmModule.forFeature([ WorkspaceEntity, - DataSourceEntity, ObjectMetadataEntity, MessageChannelEntity, MessageFolderEntity, diff --git a/packages/twenty-server/src/modules/messaging/monitoring/messaging-monitoring.module.ts b/packages/twenty-server/src/modules/messaging/monitoring/messaging-monitoring.module.ts index 916c0486fb..e7774d4b7c 100644 --- a/packages/twenty-server/src/modules/messaging/monitoring/messaging-monitoring.module.ts +++ b/packages/twenty-server/src/modules/messaging/monitoring/messaging-monitoring.module.ts @@ -3,7 +3,6 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { MessageChannelEntity } from 'src/engine/metadata-modules/message-channel/entities/message-channel.entity'; import { MessagingCommonModule } from 'src/modules/messaging/common/messaging-common.module'; import { MessagingMessageChannelSyncStatusMonitoringCronCommand } from 'src/modules/messaging/monitoring/crons/commands/messaging-message-channel-sync-status-monitoring.cron.command'; @@ -14,11 +13,7 @@ import { MessagingMonitoringService } from 'src/modules/messaging/monitoring/ser imports: [ AuditModule, MessagingCommonModule, - TypeOrmModule.forFeature([ - WorkspaceEntity, - DataSourceEntity, - MessageChannelEntity, - ]), + TypeOrmModule.forFeature([WorkspaceEntity, MessageChannelEntity]), ], providers: [ MessagingMessageChannelSyncStatusMonitoringCronCommand, diff --git a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/workflow-run.module.ts b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/workflow-run.module.ts index a729859008..eb985819f1 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/workflow-run.module.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/workflow-run.module.ts @@ -7,7 +7,6 @@ import { CacheLockModule } from 'src/engine/core-modules/cache-lock/cache-lock.m import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { RecordPositionModule } from 'src/engine/core-modules/record-position/record-position.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkflowCommonModule } from 'src/modules/workflow/common/workflow-common.module'; import { DeleteWorkflowRunsCommand } from 'src/modules/workflow/workflow-runner/workflow-run/command/delete-workflow-runs.command'; @@ -23,7 +22,6 @@ import { WorkflowRunWorkspaceService } from 'src/modules/workflow/workflow-runne RecordPositionModule, CacheLockModule, MetricsModule, - DataSourceModule, WorkspaceIteratorModule, ], providers: [WorkflowRunWorkspaceService, DeleteWorkflowRunsCommand], diff --git a/packages/twenty-server/src/utils/__test__/get-object-metadata-entity.mock.ts b/packages/twenty-server/src/utils/__test__/get-object-metadata-entity.mock.ts index 2278f4b334..6ba64a494a 100644 --- a/packages/twenty-server/src/utils/__test__/get-object-metadata-entity.mock.ts +++ b/packages/twenty-server/src/utils/__test__/get-object-metadata-entity.mock.ts @@ -2,7 +2,6 @@ import { faker } from '@faker-js/faker'; import { type ApplicationEntity } from 'src/engine/core-modules/application/application.entity'; import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { type DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; export type GetMockObjectMetadataEntityOverride = @@ -21,7 +20,6 @@ export const getMockObjectMetadataEntity = ( workspace: {} as WorkspaceEntity, createdAt: new Date(), updatedAt: new Date(), - dataSource: {} as DataSourceEntity, dataSourceId: faker.string.uuid(), description: 'default object metadata description', duplicateCriteria: [], diff --git a/packages/twenty-server/test/integration/utils/setup-test.ts b/packages/twenty-server/test/integration/utils/setup-test.ts index c377bf67ef..8432d735f6 100644 --- a/packages/twenty-server/test/integration/utils/setup-test.ts +++ b/packages/twenty-server/test/integration/utils/setup-test.ts @@ -3,7 +3,6 @@ import 'tsconfig-paths/register'; import { DataSeedWorkspaceCommand } from 'src/database/commands/data-seed-dev-workspace.command'; import { rawDataSource } from 'src/database/typeorm/raw/raw.datasource'; -import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { createApp } from './create-app'; @@ -20,6 +19,5 @@ export default async (_: unknown, projectConfig: JestConfigWithTsJest) => { global.app = app; global.testDataSource = rawDataSource; - global.dataSourceService = app.get(DataSourceService); global.dataSeedWorkspaceCommand = app.get(DataSeedWorkspaceCommand); }; diff --git a/packages/twenty-shared/src/types/FeatureFlagKey.ts b/packages/twenty-shared/src/types/FeatureFlagKey.ts index 9ec13626c1..3037f66301 100644 --- a/packages/twenty-shared/src/types/FeatureFlagKey.ts +++ b/packages/twenty-shared/src/types/FeatureFlagKey.ts @@ -14,5 +14,7 @@ export enum FeatureFlagKey { IS_RICH_TEXT_V1_MIGRATED = 'IS_RICH_TEXT_V1_MIGRATED', IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED = 'IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED', IS_RECORD_TABLE_WIDGET_ENABLED = 'IS_RECORD_TABLE_WIDGET_ENABLED', + // @deprecated - Migration is complete. Kept for backward compatibility + // until all workspaces have the flag and the flag can be removed entirely. IS_DATASOURCE_MIGRATED = 'IS_DATASOURCE_MIGRATED', }