From 74eab775395fc29acf708ed0d9c2ccbecbdb8118 Mon Sep 17 00:00:00 2001 From: Paul Rastoin <45004772+prastoin@users.noreply.github.com> Date: Wed, 26 Nov 2025 12:53:33 +0100 Subject: [PATCH] Refactor upgrade devx to allow configuring workspaces status to pass over (#16066) # Introduction We need to be able to create custom workspace application on all workspaces, even pending and ongoing etc Right now the upgrade devx only allows and expect active or suspended workspace to be passed to runOnWorkspace. ## WorkspacesMigrationRunner Created an intermediate class `WorkspacesMigrationRunner` that expect an array `WorkspaceStatus` to be fetched for the current command to be run on The `ActiveOrSuspendedCommandRunner` statically passes both `SUSPENDED` and `ACTIVE`, whereas the create workspace custom application passed all the enum values ## DataSource Workspace that are not fully init don't have a `workspace_schema` so they don't have `dataSource` Made a not very elegant check to see if current workspace we're about to create dataSource on has one historically Which means that dataSource is now optional, it had only one impact on an existing command and the desired devx will become consuming existing services that do not expect dataSource ( or at least yet ) --- .../__tests__/upgrade.command-runner.spec.ts | 35 +++- ...ded-workspaces-migration.command-runner.ts | 181 ++--------------- .../command-runners/upgrade.command-runner.ts | 19 +- .../workspaces-migration.command-runner.ts | 187 ++++++++++++++++++ ...-add-workflow-run-stop-statuses.command.ts | 10 +- ...ate-operation-field-metadata-id.command.ts | 10 +- ...tadata-id-foreign-key-migration.command.ts | 10 +- .../1-10/1-10-flush-cache.command.ts | 10 +- ...sure-dashboard-naming-available.command.ts | 10 +- ...attachment-author-to-created-by.command.ts | 12 +- ...ttachment-type-to-file-category.command.ts | 10 +- ...hannel-partial-full-sync-stages.command.ts | 10 +- .../1-10-regenerate-search-vectors.command.ts | 14 +- .../1-10/1-10-seed-dashboard-view.command.ts | 12 +- .../1-10-upgrade-version-command.module.ts | 2 + ...-11-clean-orphaned-role-targets.command.ts | 10 +- ...-clean-orphaned-user-workspaces.command.ts | 10 +- ...ate-twenty-standard-application.command.ts | 10 +- .../1-11-upgrade-version-command.module.ts | 2 + ...nts-import-scheduled-sync-stage.command.ts | 10 +- ...ges-import-scheduled-sync-stage.command.ts | 10 +- ...te-workspace-custom-application.command.ts | 17 +- ...d-application-not-uninstallable.command.ts | 10 +- .../1-12-upgrade-version-command.module.ts | 2 + ...ation-id-non-nullable-migration.command.ts | 10 +- ...ntifier-position-and-visibility.command.ts | 10 +- .../1-6/1-6-upgrade-version-command.module.ts | 2 + ...low-manual-trigger-availability.command.ts | 10 +- .../1-7/1-7-upgrade-version-command.module.ts | 3 +- .../1-8-deduplicate-unique-fields.command.ts | 16 +- ...ll-serverless-function-layer-id.command.ts | 14 +- ...1-8-migrate-channel-sync-stages.command.ts | 12 +- ...rate-workflow-step-filter-operand-value.ts | 10 +- ...erson-search-vector-with-phones.command.ts | 10 +- .../1-8/1-8-upgrade-version-command.module.ts | 2 + .../upgrade-version-command.module.ts | 2 + .../upgrade.command.ts | 3 + .../core-modules/billing/billing.module.ts | 8 +- .../billing-sync-customer-data.command.ts | 10 +- ...lling-update-subscription-price.command.ts | 10 +- .../sync-workspace-metadata.command.ts | 10 +- ...message-clearner-remove-orphans.command.ts | 10 +- .../messaging-message-cleaner.module.ts | 3 +- .../command/delete-workflow-runs.command.ts | 12 +- .../workflow-run/workflow-run.module.ts | 2 + 45 files changed, 448 insertions(+), 334 deletions(-) create mode 100644 packages/twenty-server/src/database/commands/command-runners/workspaces-migration.command-runner.ts diff --git a/packages/twenty-server/src/database/commands/command-runners/__tests__/upgrade.command-runner.spec.ts b/packages/twenty-server/src/database/commands/command-runners/__tests__/upgrade.command-runner.spec.ts index 076e7efd40..cdd068e9c7 100644 --- a/packages/twenty-server/src/database/commands/command-runners/__tests__/upgrade.command-runner.spec.ts +++ b/packages/twenty-server/src/database/commands/command-runners/__tests__/upgrade.command-runner.spec.ts @@ -11,6 +11,7 @@ import { UpgradeCommandRunner } from 'src/database/commands/command-runners/upgr import { type ConfigVariables } from 'src/engine/core-modules/twenty-config/config-variables'; 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 { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { SyncWorkspaceMetadataCommand } from 'src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command'; @@ -72,9 +73,37 @@ const buildUpgradeCommandModule = async ({ appVersion, commandRunner, }: BuildUpgradeCommandModuleArgs) => { + const mockDataSourceService = { + getLastDataSourceMetadataFromWorkspaceId: jest.fn(), + }; + const module: TestingModule = await Test.createTestingModule({ providers: [ - commandRunner, + { + provide: commandRunner, + useFactory: ( + workspaceRepository: Repository, + twentyConfigService: TwentyConfigService, + twentyORMGlobalManager: TwentyORMGlobalManager, + dataSourceService: DataSourceService, + syncWorkspaceMetadataCommand: SyncWorkspaceMetadataCommand, + ) => { + return new commandRunner( + workspaceRepository, + twentyConfigService, + twentyORMGlobalManager, + dataSourceService, + syncWorkspaceMetadataCommand, + ); + }, + inject: [ + getRepositoryToken(WorkspaceEntity), + TwentyConfigService, + TwentyORMGlobalManager, + DataSourceService, + SyncWorkspaceMetadataCommand, + ], + }, { provide: getRepositoryToken(WorkspaceEntity), useValue: { @@ -110,6 +139,10 @@ const buildUpgradeCommandModule = async ({ getDataSourceForWorkspace: jest.fn(), }, }, + { + provide: DataSourceService, + useValue: mockDataSourceService, + }, { provide: SyncWorkspaceMetadataCommand, useValue: { diff --git a/packages/twenty-server/src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner.ts b/packages/twenty-server/src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner.ts index fd99acb38e..c50cde3bb9 100644 --- a/packages/twenty-server/src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner.ts +++ b/packages/twenty-server/src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner.ts @@ -1,180 +1,29 @@ -import chalk from 'chalk'; -import { Option } from 'nest-commander'; import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; -import { In, MoreThanOrEqual, type Repository } from 'typeorm'; +import { type Repository } from 'typeorm'; -import { MigrationCommandRunner } from 'src/database/commands/command-runners/migration.command-runner'; -import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { type WorkspaceDataSource } from 'src/engine/twenty-orm/datasource/workspace.datasource'; +import { + WorkspacesMigrationCommandRunner, + type WorkspacesMigrationCommandOptions, +} from 'src/database/commands/command-runners/workspaces-migration.command-runner'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { type TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -export type ActiveOrSuspendedWorkspacesMigrationCommandOptions = { - workspaceIds: string[]; - startFromWorkspaceId?: string; - workspaceCountLimit?: number; - dryRun?: boolean; - verbose?: boolean; -}; - -export type RunOnWorkspaceArgs = { - options: ActiveOrSuspendedWorkspacesMigrationCommandOptions; - workspaceId: string; - dataSource: WorkspaceDataSource; - index: number; - total: number; -}; - -export type WorkspaceMigrationReport = { - fail: { - workspaceId: string; - error: Error; - }[]; - success: { - workspaceId: string; - }[]; -}; +export type ActiveOrSuspendedWorkspacesMigrationCommandOptions = + WorkspacesMigrationCommandOptions; export abstract class ActiveOrSuspendedWorkspacesMigrationCommandRunner< Options extends ActiveOrSuspendedWorkspacesMigrationCommandOptions = ActiveOrSuspendedWorkspacesMigrationCommandOptions, -> extends MigrationCommandRunner { - private workspaceIds: Set = new Set(); - private startFromWorkspaceId: string | undefined; - private workspaceCountLimit: number | undefined; - public migrationReport: WorkspaceMigrationReport = { - fail: [], - success: [], - }; - +> extends WorkspacesMigrationCommandRunner { constructor( protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, ) { - super(); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService, [ + WorkspaceActivationStatus.ACTIVE, + WorkspaceActivationStatus.SUSPENDED, + ]); } - - @Option({ - flags: '--start-from-workspace-id [workspace_id]', - description: - 'Start from a specific workspace id. Workspaces are processed in ascending order of id.', - required: false, - }) - parseStartFromWorkspaceId(val: string): string { - this.startFromWorkspaceId = val; - - return val; - } - - @Option({ - flags: '--workspace-count-limit [count]', - description: - 'Limit the number of workspaces to process. Workspaces are processed in ascending order of id.', - required: false, - }) - parseWorkspaceCountLimit(val: string): number { - this.workspaceCountLimit = parseInt(val); - - if (isNaN(this.workspaceCountLimit)) { - throw new Error('Workspace count limit must be a number'); - } - - if (this.workspaceCountLimit <= 0) { - throw new Error('Workspace count limit must be greater than 0'); - } - - return this.workspaceCountLimit; - } - - @Option({ - flags: '-w, --workspace-id [workspace_id]', - description: - 'workspace id. Command runs on all active workspaces if not provided.', - required: false, - }) - parseWorkspaceId(val: string): Set { - this.workspaceIds.add(val); - - return this.workspaceIds; - } - - protected async fetchActiveWorkspaceIds(): Promise { - const activeWorkspaces = await this.workspaceRepository.find({ - select: ['id'], - where: { - activationStatus: In([ - WorkspaceActivationStatus.ACTIVE, - WorkspaceActivationStatus.SUSPENDED, - ]), - ...(this.startFromWorkspaceId - ? { id: MoreThanOrEqual(this.startFromWorkspaceId) } - : {}), - }, - order: { - id: 'ASC', - }, - take: this.workspaceCountLimit, - }); - - return activeWorkspaces.map((workspace) => workspace.id); - } - - override async runMigrationCommand( - _passedParams: string[], - options: Options, - ) { - const activeWorkspaceIds = - this.workspaceIds.size > 0 - ? Array.from(this.workspaceIds) - : await this.fetchActiveWorkspaceIds(); - - if (options.dryRun) { - this.logger.log(chalk.yellow('Dry run mode: No changes will be applied')); - } - - for (const [index, workspaceId] of activeWorkspaceIds.entries()) { - this.logger.log( - `Running command on workspace ${workspaceId} ${index + 1}/${activeWorkspaceIds.length}`, - ); - - try { - const dataSource = - await this.twentyORMGlobalManager.getDataSourceForWorkspace({ - workspaceId, - }); - - await this.runOnWorkspace({ - options, - workspaceId, - dataSource, - index: index, - total: activeWorkspaceIds.length, - }); - this.migrationReport.success.push({ - workspaceId, - }); - } catch (error) { - this.migrationReport.fail.push({ - error, - workspaceId, - }); - this.logger.warn( - chalk.red(`Error in workspace ${workspaceId}: ${error.message}`), - ); - } - - try { - await this.twentyORMGlobalManager.destroyDataSourceForWorkspace( - workspaceId, - ); - } catch (error) { - this.logger.error(error); - } - } - - this.migrationReport.fail.forEach(({ error, workspaceId }) => - this.logger.error(`Error in workspace ${workspaceId}: ${error.message}`), - ); - } - - public abstract runOnWorkspace(args: RunOnWorkspaceArgs): Promise; } diff --git a/packages/twenty-server/src/database/commands/command-runners/upgrade.command-runner.ts b/packages/twenty-server/src/database/commands/command-runners/upgrade.command-runner.ts index 797829e1a7..d7560c786f 100644 --- a/packages/twenty-server/src/database/commands/command-runners/upgrade.command-runner.ts +++ b/packages/twenty-server/src/database/commands/command-runners/upgrade.command-runner.ts @@ -12,10 +12,14 @@ import { In, Repository } from 'typeorm'; import { ActiveOrSuspendedWorkspacesMigrationCommandOptions, ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { + RunOnWorkspaceArgs, + WorkspacesMigrationCommandRunner, +} from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { SyncWorkspaceMetadataCommand } from 'src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command'; import { @@ -25,8 +29,14 @@ import { import { getPreviousVersion } from 'src/utils/version/get-previous-version'; export type VersionCommands = { - beforeSyncMetadata: ActiveOrSuspendedWorkspacesMigrationCommandRunner[]; - afterSyncMetadata: ActiveOrSuspendedWorkspacesMigrationCommandRunner[]; + beforeSyncMetadata: ( + | WorkspacesMigrationCommandRunner + | ActiveOrSuspendedWorkspacesMigrationCommandRunner + )[]; + afterSyncMetadata: ( + | WorkspacesMigrationCommandRunner + | ActiveOrSuspendedWorkspacesMigrationCommandRunner + )[]; }; export type AllCommands = Record; const execPromise = promisify(exec); @@ -43,9 +53,10 @@ export abstract class UpgradeCommandRunner extends ActiveOrSuspendedWorkspacesMi protected readonly workspaceRepository: Repository, protected readonly twentyConfigService: TwentyConfigService, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, protected readonly syncWorkspaceMetadataCommand: SyncWorkspaceMetadataCommand, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } private async loadActiveOrSuspendedWorkspace() { diff --git a/packages/twenty-server/src/database/commands/command-runners/workspaces-migration.command-runner.ts b/packages/twenty-server/src/database/commands/command-runners/workspaces-migration.command-runner.ts new file mode 100644 index 0000000000..f84a1d38ee --- /dev/null +++ b/packages/twenty-server/src/database/commands/command-runners/workspaces-migration.command-runner.ts @@ -0,0 +1,187 @@ +import chalk from 'chalk'; +import { Option } from 'nest-commander'; +import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; +import { In, MoreThanOrEqual, type Repository } from 'typeorm'; +import { isDefined } from 'twenty-shared/utils'; + +import { MigrationCommandRunner } from 'src/database/commands/command-runners/migration.command-runner'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; +import { type WorkspaceDataSource } from 'src/engine/twenty-orm/datasource/workspace.datasource'; +import { type TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; + +export type WorkspacesMigrationCommandOptions = { + workspaceIds: string[]; + startFromWorkspaceId?: string; + workspaceCountLimit?: number; + dryRun?: boolean; + verbose?: boolean; +}; + +export type RunOnWorkspaceArgs = { + options: WorkspacesMigrationCommandOptions; + workspaceId: string; + dataSource?: WorkspaceDataSource; + index: number; + total: number; +}; + +export type WorkspaceMigrationReport = { + fail: { + workspaceId: string; + error: Error; + }[]; + success: { + workspaceId: string; + }[]; +}; + +export abstract class WorkspacesMigrationCommandRunner< + Options extends + WorkspacesMigrationCommandOptions = WorkspacesMigrationCommandOptions, +> extends MigrationCommandRunner { + protected workspaceIds: Set = new Set(); + private startFromWorkspaceId: string | undefined; + private workspaceCountLimit: number | undefined; + public migrationReport: WorkspaceMigrationReport = { + fail: [], + success: [], + }; + + constructor( + protected readonly workspaceRepository: Repository, + protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, + protected readonly activationStatuses: WorkspaceActivationStatus[], + ) { + super(); + } + + @Option({ + flags: '--start-from-workspace-id [workspace_id]', + description: + 'Start from a specific workspace id. Workspaces are processed in ascending order of id.', + required: false, + }) + parseStartFromWorkspaceId(val: string): string { + this.startFromWorkspaceId = val; + + return val; + } + + @Option({ + flags: '--workspace-count-limit [count]', + description: + 'Limit the number of workspaces to process. Workspaces are processed in ascending order of id.', + required: false, + }) + parseWorkspaceCountLimit(val: string): number { + this.workspaceCountLimit = parseInt(val); + + if (isNaN(this.workspaceCountLimit)) { + throw new Error('Workspace count limit must be a number'); + } + + if (this.workspaceCountLimit <= 0) { + throw new Error('Workspace count limit must be greater than 0'); + } + + return this.workspaceCountLimit; + } + + @Option({ + flags: '-w, --workspace-id [workspace_id]', + description: + 'workspace id. Command runs on all workspaces matching the activation statuses if not provided.', + required: false, + }) + parseWorkspaceId(val: string): Set { + this.workspaceIds.add(val); + + return this.workspaceIds; + } + + protected async fetchWorkspaceIds(): Promise { + const workspaces = await this.workspaceRepository.find({ + select: ['id'], + where: { + activationStatus: In(this.activationStatuses), + ...(this.startFromWorkspaceId + ? { id: MoreThanOrEqual(this.startFromWorkspaceId) } + : {}), + }, + order: { + id: 'ASC', + }, + take: this.workspaceCountLimit, + }); + + return workspaces.map((workspace) => workspace.id); + } + + override async runMigrationCommand( + _passedParams: string[], + options: Options, + ) { + const workspaceIdsToProcess = + this.workspaceIds.size > 0 + ? Array.from(this.workspaceIds) + : await this.fetchWorkspaceIds(); + + if (options.dryRun) { + this.logger.log(chalk.yellow('Dry run mode: No changes will be applied')); + } + + for (const [index, workspaceId] of workspaceIdsToProcess.entries()) { + this.logger.log( + `Running command on workspace ${workspaceId} ${index + 1}/${workspaceIdsToProcess.length}`, + ); + + try { + const workspaceHasDataSource = + await this.dataSourceService.getLastDataSourceMetadataFromWorkspaceId( + workspaceId, + ); + + const dataSource = isDefined(workspaceHasDataSource) + ? await this.twentyORMGlobalManager.getDataSourceForWorkspace({ + workspaceId, + }) + : undefined; + + await this.runOnWorkspace({ + options, + workspaceId, + dataSource, + index: index, + total: workspaceIdsToProcess.length, + }); + this.migrationReport.success.push({ + workspaceId, + }); + } catch (error) { + this.migrationReport.fail.push({ + error, + workspaceId, + }); + this.logger.warn( + chalk.red(`Error in workspace ${workspaceId}: ${error.message}`), + ); + } + + try { + await this.twentyORMGlobalManager.destroyDataSourceForWorkspace( + workspaceId, + ); + } catch (error) { + this.logger.error(error); + } + } + + this.migrationReport.fail.forEach(({ error, workspaceId }) => + this.logger.error(`Error in workspace ${workspaceId}: ${error.message}`), + ); + } + + public abstract runOnWorkspace(args: RunOnWorkspaceArgs): Promise; +} diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-add-workflow-run-stop-statuses.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-add-workflow-run-stop-statuses.command.ts index b9cb287640..c273c6760e 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-add-workflow-run-stop-statuses.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-add-workflow-run-stop-statuses.command.ts @@ -4,11 +4,10 @@ import { Command } from 'nest-commander'; import { DataSource, Repository } from 'typeorm'; import { v4 } from 'uuid'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { FieldMetadataComplexOption } from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -25,12 +24,13 @@ export class AddWorkflowRunStopStatusesCommand extends ActiveOrSuspendedWorkspac @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(FieldMetadataEntity) private readonly fieldMetadataRepository: Repository, @InjectDataSource() private readonly coreDataSource: DataSource, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-clean-orphaned-kanban-aggregate-operation-field-metadata-id.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-clean-orphaned-kanban-aggregate-operation-field-metadata-id.command.ts index 8014c08c38..b5d82bf2ad 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-clean-orphaned-kanban-aggregate-operation-field-metadata-id.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-clean-orphaned-kanban-aggregate-operation-field-metadata-id.command.ts @@ -4,11 +4,10 @@ import { Command } from 'nest-commander'; import { isDefined } from 'twenty-shared/utils'; import { In, IsNull, Not, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; @@ -24,12 +23,13 @@ export class CleanOrphanedKanbanAggregateOperationFieldMetadataIdCommand extends @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(ViewEntity) private readonly viewRepository: Repository, @InjectRepository(FieldMetadataEntity) private readonly fieldMetadataRepository: Repository, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-create-view-kanban-field-metadata-id-foreign-key-migration.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-create-view-kanban-field-metadata-id-foreign-key-migration.command.ts index 9cca7beb5d..5b38b1ec74 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-create-view-kanban-field-metadata-id-foreign-key-migration.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-create-view-kanban-field-metadata-id-foreign-key-migration.command.ts @@ -3,11 +3,10 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { DataSource, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -22,10 +21,11 @@ export class CreateViewKanbanFieldMetadataIdForeignKeyMigrationCommand extends A @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectDataSource() private readonly coreDataSource: DataSource, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-flush-cache.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-flush-cache.command.ts index 0404defa10..4479ec67e9 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-flush-cache.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-flush-cache.command.ts @@ -3,11 +3,10 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; @@ -20,9 +19,10 @@ export class FlushCacheCommand extends ActiveOrSuspendedWorkspacesMigrationComma @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, protected readonly workspaceCacheStorageService: WorkspaceCacheStorageService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-make-sure-dashboard-naming-available.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-make-sure-dashboard-naming-available.command.ts index f2cf6d9f69..b9030de9c3 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-make-sure-dashboard-naming-available.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-make-sure-dashboard-naming-available.command.ts @@ -4,11 +4,10 @@ import { Command } from 'nest-commander'; import { isDefined } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { ObjectMetadataServiceV2 } from 'src/engine/metadata-modules/object-metadata/object-metadata-v2.service'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -22,11 +21,12 @@ export class MakeSureDashboardNamingAvailableCommand extends ActiveOrSuspendedWo @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, private readonly objectMetadataServiceV2: ObjectMetadataServiceV2, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-author-to-created-by.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-author-to-created-by.command.ts index 59aab5fed3..e53191f4f0 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-author-to-created-by.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-author-to-created-by.command.ts @@ -1,15 +1,14 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; +import { FieldActorSource } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { IsNull, Not, Repository } from 'typeorm'; -import { FieldActorSource } from 'twenty-shared/types'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @@ -24,8 +23,9 @@ export class MigrateAttachmentAuthorToCreatedByCommand extends ActiveOrSuspended @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-type-to-file-category.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-type-to-file-category.command.ts index 5f0c2701d1..ea339e94e4 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-type-to-file-category.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-type-to-file-category.command.ts @@ -3,11 +3,10 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; @@ -32,8 +31,9 @@ export class MigrateAttachmentTypeToFileCategoryCommand extends ActiveOrSuspende @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-channel-partial-full-sync-stages.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-channel-partial-full-sync-stages.command.ts index 163a48989e..44d8d33f0e 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-channel-partial-full-sync-stages.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-channel-partial-full-sync-stages.command.ts @@ -3,11 +3,10 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { DataSource, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; @@ -21,10 +20,11 @@ export class MigrateChannelPartialFullSyncStagesCommand extends ActiveOrSuspende @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectDataSource() private readonly coreDataSource: DataSource, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-regenerate-search-vectors.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-regenerate-search-vectors.command.ts index 53552923f0..bd4b8e88dc 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-regenerate-search-vectors.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-regenerate-search-vectors.command.ts @@ -1,17 +1,16 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; -import { DataSource, In, Repository, type QueryRunner } from 'typeorm'; import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata'; +import { DataSource, In, Repository, type QueryRunner } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-metadata/constants/search-vector-field.constants'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; +import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-metadata/constants/search-vector-field.constants'; import { SEARCH_FIELDS_FOR_CUSTOM_OBJECT } from 'src/engine/twenty-orm/custom.workspace-entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; @@ -42,6 +41,7 @@ export class RegenerateSearchVectorsCommand extends ActiveOrSuspendedWorkspacesM @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, private readonly workspaceSchemaManager: WorkspaceSchemaManagerService, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, @@ -50,7 +50,7 @@ export class RegenerateSearchVectorsCommand extends ActiveOrSuspendedWorkspacesM @InjectDataSource() private readonly coreDataSource: DataSource, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-seed-dashboard-view.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-seed-dashboard-view.command.ts index 9bcb3c876b..359e9c3087 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-seed-dashboard-view.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-seed-dashboard-view.command.ts @@ -1,17 +1,16 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; +import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata'; import { isDefined } from 'twenty-shared/utils'; import { DataSource, Repository } from 'typeorm'; -import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { ApplicationService } from 'src/engine/core-modules/application/application.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.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 { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; @@ -32,6 +31,7 @@ export class SeedDashboardViewCommand extends ActiveOrSuspendedWorkspacesMigrati @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, @InjectRepository(DataSourceEntity) @@ -40,7 +40,7 @@ export class SeedDashboardViewCommand extends ActiveOrSuspendedWorkspacesMigrati private readonly viewRepository: Repository, private readonly applicationService: ApplicationService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-upgrade-version-command.module.ts index 70d6996c10..f2147080f8 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-upgrade-version-command.module.ts @@ -15,6 +15,7 @@ import { ApplicationEntity } from 'src/engine/core-modules/application/applicati import { ApplicationModule } from 'src/engine/core-modules/application/application.module'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.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 { 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 { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; @@ -35,6 +36,7 @@ import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/ DataSourceEntity, ApplicationEntity, ]), + DataSourceModule, WorkspaceSchemaManagerModule, WorkspaceCacheStorageModule, ObjectMetadataModule, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-clean-orphaned-role-targets.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-clean-orphaned-role-targets.command.ts index 475afb6b66..9cc260158f 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-clean-orphaned-role-targets.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-clean-orphaned-role-targets.command.ts @@ -3,12 +3,11 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { In, type Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; 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 { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -25,8 +24,9 @@ export class CleanOrphanedRoleTargetsCommand extends ActiveOrSuspendedWorkspaces @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-clean-orphaned-user-workspaces.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-clean-orphaned-user-workspaces.command.ts index 6498c56325..176d36702b 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-clean-orphaned-user-workspaces.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-clean-orphaned-user-workspaces.command.ts @@ -3,12 +3,11 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { In, type Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; 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 { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @@ -22,10 +21,11 @@ export class CleanOrphanedUserWorkspacesCommand extends ActiveOrSuspendedWorkspa @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(UserWorkspaceEntity) private readonly userWorkspaceRepository: Repository, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-create-twenty-standard-application.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-create-twenty-standard-application.command.ts index 9e11693fa3..78f4312f0c 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-create-twenty-standard-application.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-create-twenty-standard-application.command.ts @@ -3,14 +3,13 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { In, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity'; import { ApplicationService } from 'src/engine/core-modules/application/application.service'; import { TWENTY_STANDARD_APPLICATION } from 'src/engine/core-modules/application/constants/twenty-standard-applications'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -23,11 +22,12 @@ export class CreateTwentyStandardApplicationCommand extends ActiveOrSuspendedWor @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(ApplicationEntity) private readonly applicationRepository: Repository, private readonly applicationService: ApplicationService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-upgrade-version-command.module.ts index b9d11f1049..97852ae039 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-11/1-11-upgrade-version-command.module.ts @@ -8,6 +8,7 @@ import { ApplicationEntity } from 'src/engine/core-modules/application/applicati import { ApplicationModule } from 'src/engine/core-modules/application/application.module'; import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; 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 { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -27,6 +28,7 @@ import { WorkspaceSchemaManagerModule } from 'src/engine/twenty-orm/workspace-sc RoleTargetsEntity, ApplicationEntity, ]), + DataSourceModule, WorkspaceSchemaManagerModule, ApplicationModule, ], diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-add-calendar-events-import-scheduled-sync-stage.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-add-calendar-events-import-scheduled-sync-stage.command.ts index 4e4720081d..77ace80d29 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-add-calendar-events-import-scheduled-sync-stage.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-add-calendar-events-import-scheduled-sync-stage.command.ts @@ -4,11 +4,10 @@ import { Command } from 'nest-commander'; import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata'; import { DataSource, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -26,6 +25,7 @@ export class AddCalendarEventsImportScheduledSyncStageCommand extends ActiveOrSu @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, @InjectRepository(FieldMetadataEntity) @@ -33,7 +33,7 @@ export class AddCalendarEventsImportScheduledSyncStageCommand extends ActiveOrSu @InjectDataSource() private readonly coreDataSource: DataSource, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-add-messages-import-scheduled-sync-stage.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-add-messages-import-scheduled-sync-stage.command.ts index 87d1ea0397..a87827d701 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-add-messages-import-scheduled-sync-stage.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-add-messages-import-scheduled-sync-stage.command.ts @@ -4,11 +4,10 @@ import { Command } from 'nest-commander'; import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata'; import { DataSource, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -26,6 +25,7 @@ export class AddMessagesImportScheduledSyncStageCommand extends ActiveOrSuspende @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, @InjectRepository(FieldMetadataEntity) @@ -33,7 +33,7 @@ export class AddMessagesImportScheduledSyncStageCommand extends ActiveOrSuspende @InjectDataSource() private readonly coreDataSource: DataSource, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-create-workspace-custom-application.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-create-workspace-custom-application.command.ts index 6ba3b7b4eb..e1afb936d2 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-create-workspace-custom-application.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-create-workspace-custom-application.command.ts @@ -2,14 +2,16 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { isDefined } from 'twenty-shared/utils'; +import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; import { Repository } from 'typeorm'; import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, + WorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +} from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { ApplicationService } from 'src/engine/core-modules/application/application.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -17,14 +19,21 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. description: 'Create workspace-custom application for workspaces that do not have them', }) -export class CreateWorkspaceCustomApplicationCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { +export class CreateWorkspaceCustomApplicationCommand extends WorkspacesMigrationCommandRunner { constructor( @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, private readonly applicationService: ApplicationService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService, [ + WorkspaceActivationStatus.ONGOING_CREATION, + WorkspaceActivationStatus.PENDING_CREATION, + WorkspaceActivationStatus.ACTIVE, + WorkspaceActivationStatus.INACTIVE, + WorkspaceActivationStatus.SUSPENDED, + ]); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-set-standard-application-not-uninstallable.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-set-standard-application-not-uninstallable.command.ts index e638a3075a..04efd248f7 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-set-standard-application-not-uninstallable.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-set-standard-application-not-uninstallable.command.ts @@ -3,12 +3,11 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { ApplicationService } from 'src/engine/core-modules/application/application.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; // Note: this command needs to be run after CreateWorkspaceCustomApplicationCommand @@ -21,9 +20,10 @@ export class SetStandardApplicationNotUninstallableCommand extends ActiveOrSuspe @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, private readonly applicationService: ApplicationService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-upgrade-version-command.module.ts index d1bdb3394f..e85d77e6ce 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-upgrade-version-command.module.ts @@ -8,6 +8,7 @@ import { SetStandardApplicationNotUninstallableCommand } from 'src/database/comm import { WorkspaceCustomApplicationIdNonNullableCommand } from 'src/database/commands/upgrade-version-command/1-12/1-12-workspace-custom-application-id-non-nullable-migration.command'; import { ApplicationModule } from 'src/engine/core-modules/application/application.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 { FieldMetadataModule } from 'src/engine/metadata-modules/field-metadata/field-metadata.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -20,6 +21,7 @@ import { WorkspaceSchemaManagerModule } from 'src/engine/twenty-orm/workspace-sc ObjectMetadataEntity, FieldMetadataEntity, ]), + DataSourceModule, WorkspaceSchemaManagerModule, ApplicationModule, FieldMetadataModule, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-workspace-custom-application-id-non-nullable-migration.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-workspace-custom-application-id-non-nullable-migration.command.ts index 226f112a36..fce70e80f8 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-workspace-custom-application-id-non-nullable-migration.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-12/1-12-workspace-custom-application-id-non-nullable-migration.command.ts @@ -3,11 +3,10 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { DataSource, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -21,10 +20,11 @@ export class WorkspaceCustomApplicationIdNonNullableCommand extends ActiveOrSusp @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectDataSource() private readonly coreDataSource: DataSource, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command.ts index cf04ad18b2..3807d587d6 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command.ts @@ -3,11 +3,10 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -22,12 +21,13 @@ export class FixLabelIdentifierPositionAndVisibilityCommand extends ActiveOrSusp @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(ViewEntity) private readonly viewRepository: Repository, @InjectRepository(ViewFieldEntity) private readonly viewFieldRepository: Repository, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-upgrade-version-command.module.ts index 1bc57316b2..86f34c92de 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-upgrade-version-command.module.ts @@ -3,6 +3,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { FixLabelIdentifierPositionAndVisibilityCommand } from 'src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command'; 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 { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; @@ -20,6 +21,7 @@ import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/works ViewEntity, ViewFieldEntity, ]), + DataSourceModule, WorkspaceDataSourceModule, WorkspaceSchemaManagerModule, WorkspaceMetadataVersionModule, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command.ts index 0f22aa2db6..36af4cf137 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command.ts @@ -4,11 +4,10 @@ import { Command } from 'nest-commander'; import { isDefined } from 'twenty-shared/utils'; import { DataSource, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; import { WorkflowTriggerType } from 'src/modules/workflow/workflow-trigger/types/workflow-trigger.type'; @@ -23,10 +22,11 @@ export class BackfillWorkflowManualTriggerAvailabilityCommand extends ActiveOrSu @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectDataSource() private readonly coreDataSource: DataSource, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-upgrade-version-command.module.ts index f5eae5cb3f..340dfc7a38 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-upgrade-version-command.module.ts @@ -3,9 +3,10 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { BackfillWorkflowManualTriggerAvailabilityCommand } from 'src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command'; 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])], + imports: [TypeOrmModule.forFeature([WorkspaceEntity]), DataSourceModule], providers: [BackfillWorkflowManualTriggerAvailabilityCommand], exports: [BackfillWorkflowManualTriggerAvailabilityCommand], }) diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-deduplicate-unique-fields.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-deduplicate-unique-fields.command.ts index 9e0916f555..fe8e60dab8 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-deduplicate-unique-fields.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-deduplicate-unique-fields.command.ts @@ -2,13 +2,13 @@ import { Logger } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; +import { isDefined } from 'twenty-shared/utils'; import { IsNull, Not, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; 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 { IndexMetadataService } from 'src/engine/metadata-modules/index-metadata/index-metadata.service'; @@ -38,6 +38,7 @@ export class DeduplicateUniqueFieldsCommand extends ActiveOrSuspendedWorkspacesM @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, protected readonly indexMetadataService: IndexMetadataService, protected readonly workspaceMigrationRunnerService: WorkspaceMigrationRunnerService, protected readonly workspaceMigrationService: WorkspaceMigrationService, @@ -46,7 +47,7 @@ export class DeduplicateUniqueFieldsCommand extends ActiveOrSuspendedWorkspacesM @InjectRepository(IndexMetadataEntity) protected readonly indexMetadataRepository: Repository, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ @@ -57,6 +58,11 @@ export class DeduplicateUniqueFieldsCommand extends ActiveOrSuspendedWorkspacesM this.logger.log( `Deduplicating indexed fields for workspace ${workspaceId}`, ); + if (!isDefined(dataSource)) { + throw new Error( + 'Could not find workspace dataSource, should never occur', + ); + } await this.deduplicateUniqueUserEmailFieldForWorkspaceMembers({ dataSource, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-fill-null-serverless-function-layer-id.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-fill-null-serverless-function-layer-id.command.ts index dd9191f8d5..68c22bbc0a 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-fill-null-serverless-function-layer-id.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-fill-null-serverless-function-layer-id.command.ts @@ -4,14 +4,13 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; -import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { ServerlessFunctionLayerEntity } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.entity'; +import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; +import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ name: 'upgrade:1-8:fill-null-serverless-function-layer-id', @@ -26,12 +25,13 @@ export class FillNullServerlessFunctionLayerIdCommand extends ActiveOrSuspendedW @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(ServerlessFunctionEntity) protected readonly serverlessFunctionRepository: Repository, @InjectRepository(ServerlessFunctionLayerEntity) protected readonly serverlessFunctionLayerRepository: Repository, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-channel-sync-stages.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-channel-sync-stages.command.ts index ca1e1c1fba..fec1b717fd 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-channel-sync-stages.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-channel-sync-stages.command.ts @@ -1,14 +1,13 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; -import { DataSource, Repository } from 'typeorm'; import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata'; +import { DataSource, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { type FieldMetadataComplexOption } from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -32,6 +31,7 @@ export class MigrateChannelSyncStagesCommand extends ActiveOrSuspendedWorkspaces @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, @InjectRepository(FieldMetadataEntity) @@ -39,7 +39,7 @@ export class MigrateChannelSyncStagesCommand extends ActiveOrSuspendedWorkspaces @InjectDataSource() private readonly coreDataSource: DataSource, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value.ts index b59b0b450e..75c4809508 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value.ts @@ -8,11 +8,10 @@ import { } from 'twenty-shared/utils'; import { Raw, Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkflowVersionWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity'; import { isWorkflowFilterAction } from 'src/modules/workflow/workflow-executor/workflow-actions/filter/guards/is-workflow-filter-action.guard'; @@ -28,8 +27,9 @@ export class MigrateWorkflowStepFilterOperandValueCommand extends ActiveOrSuspen @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command.ts index a6f5921233..89e6c5ae88 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command.ts @@ -3,11 +3,10 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { DataSource, Repository, type QueryRunner } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; @@ -26,9 +25,10 @@ export class RegeneratePersonSearchVectorWithPhonesCommand extends ActiveOrSuspe @InjectDataSource() private readonly coreDataSource: DataSource, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, private readonly workspaceSchemaManager: WorkspaceSchemaManagerService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module.ts index 4adea7bf23..338af4f884 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module.ts @@ -7,6 +7,7 @@ import { MigrateChannelSyncStagesCommand } from 'src/database/commands/upgrade-v import { MigrateWorkflowStepFilterOperandValueCommand } from 'src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value'; import { RegeneratePersonSearchVectorWithPhonesCommand } from 'src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command'; 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 { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { IndexMetadataModule } from 'src/engine/metadata-modules/index-metadata/index-metadata.module'; @@ -27,6 +28,7 @@ import { WorkspaceMigrationRunnerModule } from 'src/engine/workspace-manager/wor ServerlessFunctionEntity, ServerlessFunctionLayerEntity, ]), + DataSourceModule, IndexMetadataModule, WorkspaceMigrationRunnerModule, WorkspaceMigrationModule, 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 e8a766b50d..b70bfad665 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 @@ -9,6 +9,7 @@ import { V1_7_UpgradeVersionCommandModule } from 'src/database/commands/upgrade- import { V1_8_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module'; import { UpgradeCommand } from 'src/database/commands/upgrade-version-command/upgrade.command'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceSyncMetadataModule } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module'; @Module({ @@ -20,6 +21,7 @@ import { WorkspaceSyncMetadataModule } from 'src/engine/workspace-manager/worksp V1_10_UpgradeVersionCommandModule, V1_11_UpgradeVersionCommandModule, V1_12_UpgradeVersionCommandModule, + DataSourceModule, WorkspaceSyncMetadataModule, ], providers: [UpgradeCommand], diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts index e72e9d2001..ed0c4d58d3 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts @@ -35,6 +35,7 @@ import { MigrateWorkflowStepFilterOperandValueCommand } from 'src/database/comma import { RegeneratePersonSearchVectorWithPhonesCommand } from 'src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command'; 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 { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { SyncWorkspaceMetadataCommand } from 'src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command'; @@ -50,6 +51,7 @@ export class UpgradeCommand extends UpgradeCommandRunner { protected readonly workspaceRepository: Repository, protected readonly twentyConfigService: TwentyConfigService, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, protected readonly syncWorkspaceMetadataCommand: SyncWorkspaceMetadataCommand, // 1.6 Commands @@ -93,6 +95,7 @@ export class UpgradeCommand extends UpgradeCommandRunner { workspaceRepository, twentyConfigService, twentyORMGlobalManager, + dataSourceService, syncWorkspaceMetadataCommand, ); 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 3317c57e84..6fb9a3a73a 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 @@ -3,9 +3,6 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { AiBillingModule } from 'src/engine/metadata-modules/ai-billing/ai-billing.module'; -import { AiModelsModule } from 'src/engine/metadata-modules/ai-models/ai-models.module'; -import { AiToolsModule } from 'src/engine/metadata-modules/ai-tools/ai-tools.module'; import { BillingResolver } from 'src/engine/core-modules/billing/billing.resolver'; import { BillingSyncCustomerDataCommand } from 'src/engine/core-modules/billing/commands/billing-sync-customer-data.command'; import { BillingSyncPlansDataCommand } from 'src/engine/core-modules/billing/commands/billing-sync-plans-data.command'; @@ -36,6 +33,10 @@ import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature- import { MessageQueueModule } from 'src/engine/core-modules/message-queue/message-queue.module'; import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { AiBillingModule } from 'src/engine/metadata-modules/ai-billing/ai-billing.module'; +import { AiModelsModule } from 'src/engine/metadata-modules/ai-models/ai-models.module'; +import { AiToolsModule } from 'src/engine/metadata-modules/ai-tools/ai-tools.module'; +import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @Module({ @@ -60,6 +61,7 @@ import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permi UserWorkspaceEntity, FeatureFlagEntity, ]), + DataSourceModule, ], providers: [ BillingSubscriptionService, diff --git a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts index 4865d92c18..a1dcb91e7a 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts @@ -6,13 +6,12 @@ import chalk from 'chalk'; import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; import { StripeSubscriptionService } from 'src/engine/core-modules/billing/stripe/services/stripe-subscription.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -27,8 +26,9 @@ export class BillingSyncCustomerDataCommand extends ActiveOrSuspendedWorkspacesM @InjectRepository(BillingCustomerEntity) protected readonly billingCustomerRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-update-subscription-price.command.ts b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-update-subscription-price.command.ts index dd374f6e7f..d9c45a4b75 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-update-subscription-price.command.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-update-subscription-price.command.ts @@ -6,14 +6,13 @@ import { Command, Option } from 'nest-commander'; import { isDefined } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; import { StripeSubscriptionItemService } from 'src/engine/core-modules/billing/stripe/services/stripe-subscription-item.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -33,8 +32,9 @@ export class BillingUpdateSubscriptionPriceCommand extends ActiveOrSuspendedWork protected readonly billingSubscriptionRepository: Repository, private readonly billingSubscriptionService: BillingSubscriptionService, private readonly stripeSubscriptionItemService: StripeSubscriptionItemService, + protected readonly dataSourceService: DataSourceService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } @Option({ diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command.ts index f1bc176d2c..fc71e78ffb 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command.ts @@ -3,15 +3,13 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkspaceSyncMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { SyncWorkspaceLoggerService } from './services/sync-workspace-logger.service'; @@ -24,12 +22,12 @@ export class SyncWorkspaceMetadataCommand extends ActiveOrSuspendedWorkspacesMig @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, private readonly workspaceSyncMetadataService: WorkspaceSyncMetadataService, - private readonly dataSourceService: DataSourceService, + protected readonly dataSourceService: DataSourceService, private readonly syncWorkspaceLoggerService: SyncWorkspaceLoggerService, private readonly featureFlagService: FeatureFlagService, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ diff --git a/packages/twenty-server/src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command.ts b/packages/twenty-server/src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command.ts index c99eeea892..93ed34f6c1 100644 --- a/packages/twenty-server/src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command.ts +++ b/packages/twenty-server/src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command.ts @@ -3,11 +3,10 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { MessagingMessageCleanerService } from 'src/modules/messaging/message-cleaner/services/messaging-message-cleaner.service'; @@ -21,8 +20,9 @@ export class MessagingMessageCleanerRemoveOrphansCommand extends ActiveOrSuspend protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, private readonly messagingMessageCleanerService: MessagingMessageCleanerService, + protected readonly dataSourceService: DataSourceService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ 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 f8de48da06..11ec4212b1 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 @@ -2,13 +2,14 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { MessagingMessageCleanerRemoveOrphansCommand } from 'src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command'; import { MessagingConnectedAccountDeletionCleanupJob } from 'src/modules/messaging/message-cleaner/jobs/messaging-connected-account-deletion-cleanup.job'; import { MessagingMessageCleanerConnectedAccountListener } from 'src/modules/messaging/message-cleaner/listeners/messaging-message-cleaner-connected-account.listener'; import { MessagingMessageCleanerService } from 'src/modules/messaging/message-cleaner/services/messaging-message-cleaner.service'; @Module({ - imports: [TypeOrmModule.forFeature([WorkspaceEntity])], + imports: [TypeOrmModule.forFeature([WorkspaceEntity]), DataSourceModule], providers: [ MessagingMessageCleanerService, MessagingConnectedAccountDeletionCleanupJob, diff --git a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/command/delete-workflow-runs.command.ts b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/command/delete-workflow-runs.command.ts index 2c46be2fb2..e0b753d142 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/command/delete-workflow-runs.command.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/command/delete-workflow-runs.command.ts @@ -3,12 +3,11 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command, Option } from 'nest-commander'; import { LessThan, Repository } from 'typeorm'; -import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -import { - ActiveOrSuspendedWorkspacesMigrationCommandRunner, - type RunOnWorkspaceArgs, -} from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; +import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type WorkflowRunWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-run.workspace-entity'; @Command({ @@ -22,8 +21,9 @@ export class DeleteWorkflowRunsCommand extends ActiveOrSuspendedWorkspacesMigrat @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + protected readonly dataSourceService: DataSourceService, ) { - super(workspaceRepository, twentyORMGlobalManager); + super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } @Option({ 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 51148035be..94be0de8b4 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 @@ -6,6 +6,7 @@ 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 { ScopedWorkspaceContextFactory } from 'src/engine/twenty-orm/factories/scoped-workspace-context.factory'; import { WorkflowCommonModule } from 'src/modules/workflow/common/workflow-common.module'; @@ -22,6 +23,7 @@ import { WorkflowRunWorkspaceService } from 'src/modules/workflow/workflow-runne RecordPositionModule, CacheLockModule, MetricsModule, + DataSourceModule, ], providers: [ WorkflowRunWorkspaceService,