fix: Save new version of the workflow instead of the previous (no-changelog) (#7428)

Github issue / Community forum post (link here to close automatically):
This commit is contained in:
Val
2023-10-23 15:30:36 +01:00
committed by GitHub
parent b6de910cbe
commit 41236b7e08
6 changed files with 443 additions and 10 deletions

View File

@@ -2,6 +2,7 @@ import type express from 'express';
import { Container } from 'typedi';
import type { FindOptionsWhere } from 'typeorm';
import { In } from 'typeorm';
import { v4 as uuid } from 'uuid';
import { ActiveWorkflowRunner } from '@/ActiveWorkflowRunner';
import config from '@/config';
@@ -36,6 +37,7 @@ export = {
const workflow = req.body;
workflow.active = false;
workflow.versionId = uuid();
await replaceInvalidCredentials(workflow);
@@ -45,6 +47,14 @@ export = {
const createdWorkflow = await createWorkflow(workflow, req.user, role);
if (isWorkflowHistoryLicensed()) {
await Container.get(WorkflowHistoryService).saveVersion(
req.user,
createdWorkflow,
createdWorkflow.id,
);
}
await Container.get(ExternalHooks).run('workflow.afterCreate', [createdWorkflow]);
void Container.get(InternalHooks).onWorkflowCreated(req.user, createdWorkflow, true);
@@ -151,6 +161,7 @@ export = {
const updateData = new WorkflowEntity();
Object.assign(updateData, req.body);
updateData.id = id;
updateData.versionId = uuid();
const sharedWorkflow = await getSharedWorkflow(req.user, id);
@@ -179,10 +190,6 @@ export = {
}
}
if (isWorkflowHistoryLicensed()) {
await Container.get(WorkflowHistoryService).saveVersion(req.user, sharedWorkflow.workflow);
}
if (sharedWorkflow.workflow.active) {
try {
await workflowRunner.add(sharedWorkflow.workflowId, 'update');
@@ -195,6 +202,14 @@ export = {
const updatedWorkflow = await getWorkflowById(sharedWorkflow.workflowId);
if (isWorkflowHistoryLicensed() && updatedWorkflow) {
await Container.get(WorkflowHistoryService).saveVersion(
req.user,
updatedWorkflow,
sharedWorkflow.workflowId,
);
}
await Container.get(ExternalHooks).run('workflow.afterUpdate', [updateData]);
void Container.get(InternalHooks).onWorkflowSaved(req.user, updateData, true);

View File

@@ -64,14 +64,14 @@ export class WorkflowHistoryService {
return hist;
}
async saveVersion(user: User, workflow: WorkflowEntity) {
async saveVersion(user: User, workflow: WorkflowEntity, workflowId: string) {
if (isWorkflowHistoryEnabled()) {
await this.workflowHistoryRepository.insert({
authors: user.firstName + ' ' + user.lastName,
connections: workflow.connections,
nodes: workflow.nodes,
versionId: workflow.versionId,
workflowId: workflow.id,
workflowId,
});
}
}

View File

@@ -26,6 +26,8 @@ import { RoleService } from '@/services/role.service';
import * as utils from '@/utils';
import { listQueryMiddleware } from '@/middlewares';
import { TagService } from '@/services/tag.service';
import { isWorkflowHistoryLicensed } from './workflowHistory/workflowHistoryHelper.ee';
import { WorkflowHistoryService } from './workflowHistory/workflowHistory.service.ee';
export const workflowsController = express.Router();
@@ -99,6 +101,14 @@ workflowsController.post(
throw new ResponseHelper.InternalServerError('Failed to save workflow');
}
if (isWorkflowHistoryLicensed()) {
await Container.get(WorkflowHistoryService).saveVersion(
req.user,
savedWorkflow,
savedWorkflow.id,
);
}
if (tagIds && !config.getEnv('workflowTagsDisabled') && savedWorkflow.tags) {
savedWorkflow.tags = Container.get(TagService).sortByRequestOrder(savedWorkflow.tags, {
requestOrder: tagIds,

View File

@@ -301,8 +301,8 @@ export class WorkflowsService {
);
}
if (isWorkflowHistoryLicensed()) {
await Container.get(WorkflowHistoryService).saveVersion(user, shared.workflow);
if (isWorkflowHistoryLicensed() && workflow.versionId !== shared.workflow.versionId) {
await Container.get(WorkflowHistoryService).saveVersion(user, workflow, workflowId);
}
const relations = config.getEnv('workflowTagsDisabled') ? [] : ['tags'];