Add command to backfill next step id on version and run steps (#11579)
- add next step id on step - backfill next step id on step, except for the last one - backfill flow for workflow run, when it exists --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
This commit is contained in:
@ -0,0 +1,117 @@
|
||||
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 { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
||||
import { WorkflowRunWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-run.workspace-entity';
|
||||
import { WorkflowVersionWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity';
|
||||
|
||||
@Command({
|
||||
name: 'upgrade:0-52:backfill-workflow-next-step-ids',
|
||||
description: 'Backfill workflow next step ids',
|
||||
})
|
||||
export class BackfillWorkflowNextStepIdsCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner {
|
||||
constructor(
|
||||
@InjectRepository(Workspace, 'core')
|
||||
protected readonly workspaceRepository: Repository<Workspace>,
|
||||
protected readonly twentyORMGlobalManager: TwentyORMGlobalManager,
|
||||
) {
|
||||
super(workspaceRepository, twentyORMGlobalManager);
|
||||
}
|
||||
|
||||
override async runOnWorkspace({
|
||||
index,
|
||||
total,
|
||||
workspaceId,
|
||||
}: RunOnWorkspaceArgs): Promise<void> {
|
||||
this.logger.log(
|
||||
`Running command for workspace ${workspaceId} ${index + 1}/${total}`,
|
||||
);
|
||||
|
||||
const workflowVersionRepository =
|
||||
await this.twentyORMGlobalManager.getRepositoryForWorkspace<WorkflowVersionWorkspaceEntity>(
|
||||
workspaceId,
|
||||
'workflowVersion',
|
||||
);
|
||||
|
||||
const workflowRunRepository =
|
||||
await this.twentyORMGlobalManager.getRepositoryForWorkspace<WorkflowRunWorkspaceEntity>(
|
||||
workspaceId,
|
||||
'workflowRun',
|
||||
);
|
||||
|
||||
const workflowVersions = await workflowVersionRepository.find();
|
||||
|
||||
for (const workflowVersion of workflowVersions) {
|
||||
const updatedSteps: WorkflowVersionWorkspaceEntity['steps'] = [];
|
||||
const workflowSteps = workflowVersion.steps;
|
||||
|
||||
if (!workflowSteps) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// for each step, add the next step id which is the next index
|
||||
for (let i = 0; i < workflowSteps.length; i++) {
|
||||
const updatedStep = {
|
||||
...workflowSteps[i],
|
||||
nextStepIds:
|
||||
i < workflowSteps.length - 1 && workflowSteps[i + 1]?.id
|
||||
? [workflowSteps[i + 1].id]
|
||||
: undefined,
|
||||
};
|
||||
|
||||
updatedSteps.push(updatedStep);
|
||||
}
|
||||
|
||||
// update workflow run flows
|
||||
const workflowRuns = await workflowRunRepository.find({
|
||||
where: {
|
||||
workflowVersionId: workflowVersion.id,
|
||||
},
|
||||
});
|
||||
|
||||
for (const workflowRun of workflowRuns) {
|
||||
const flow = workflowRun.output?.flow;
|
||||
|
||||
if (!flow?.steps) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const updatedFlow = flow.steps.map((step) => {
|
||||
const updatedStep = updatedSteps.find((s) => s.id === step.id);
|
||||
|
||||
return {
|
||||
...step,
|
||||
nextStepIds: updatedStep?.nextStepIds,
|
||||
};
|
||||
});
|
||||
|
||||
await workflowRunRepository.save({
|
||||
...workflowRun,
|
||||
output: {
|
||||
...workflowRun.output,
|
||||
flow: {
|
||||
...workflowRun.output?.flow,
|
||||
steps: updatedFlow,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
await workflowVersionRepository.save({
|
||||
...workflowVersion,
|
||||
steps: updatedSteps,
|
||||
});
|
||||
|
||||
this.logger.log(
|
||||
`Updated workflow version ${workflowVersion.id} for workspace ${workspaceId}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
|
||||
import { BackfillWorkflowNextStepIdsCommand } from 'src/database/commands/upgrade-version-command/0-52/0-52-backfill-workflow-next-step-ids.command';
|
||||
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
|
||||
@Module({
|
||||
imports: [TypeOrmModule.forFeature([Workspace], 'core')],
|
||||
providers: [BackfillWorkflowNextStepIdsCommand],
|
||||
exports: [BackfillWorkflowNextStepIdsCommand],
|
||||
})
|
||||
export class V0_52_UpgradeVersionCommandModule {}
|
||||
@ -4,10 +4,11 @@ import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { V0_43_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/0-43/0-43-upgrade-version-command.module';
|
||||
import { V0_44_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/0-44/0-44-upgrade-version-command.module';
|
||||
import { V0_50_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/0-50/0-50-upgrade-version-command.module';
|
||||
import { V0_51_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/0-51/0-51-upgrade-version-command.module';
|
||||
import { V0_52_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/0-52/0-52-upgrade-version-command.module';
|
||||
import { UpgradeCommand } from 'src/database/commands/upgrade-version-command/upgrade.command';
|
||||
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { WorkspaceSyncMetadataModule } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module';
|
||||
import { V0_51_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/0-51/0-51-upgrade-version-command.module';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
@ -16,6 +17,7 @@ import { V0_51_UpgradeVersionCommandModule } from 'src/database/commands/upgrade
|
||||
V0_44_UpgradeVersionCommandModule,
|
||||
V0_50_UpgradeVersionCommandModule,
|
||||
V0_51_UpgradeVersionCommandModule,
|
||||
V0_52_UpgradeVersionCommandModule,
|
||||
WorkspaceSyncMetadataModule,
|
||||
],
|
||||
providers: [UpgradeCommand],
|
||||
|
||||
@ -25,6 +25,7 @@ type BaseWorkflowAction = {
|
||||
type: WorkflowActionType;
|
||||
settings: WorkflowActionSettings;
|
||||
valid: boolean;
|
||||
nextStepIds?: string[];
|
||||
};
|
||||
|
||||
export type WorkflowCodeAction = BaseWorkflowAction & {
|
||||
|
||||
Reference in New Issue
Block a user