mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-21 11:49:59 +00:00
* 📘 Adjust interface * ⚡ Adjust pindata in state store * ✨ Add utils * ⚡ Replace utils calls * ⚡ Adjust pindata intake and display * 🔥 Remove excess BE fixes * 📝 Update comment * 🧪 Adjust tests * 🔥 Remove unneeded helper * 🚚 Improve naming * 🧹 Clean up `ormconfig.ts` * 📘 Add types and type guards * ⚡ Improve serializer for sqlite * ✨ Create migration utils * ⚡ Set up sqlite serializer * 🗃️ Write sqlite migration * 🗃️ Write MySQL migration * 🗃️ Write Postgres migration * ⚡ Add imports and exports to barrels * 🚚 Rename `runChunked` to `runInBatches` * ⚡ Improve migration loggers * ♻️ Address feedback * 🚚 Improve naming
80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
import { INode } from 'n8n-workflow';
|
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
import * as config from '../../../../config';
|
|
import { logMigrationEnd, logMigrationStart } from '../../utils/migrationHelpers';
|
|
import { runInBatches } from '../../utils/migrationHelpers';
|
|
import { v4 as uuid } from 'uuid';
|
|
|
|
// add node ids in workflow objects
|
|
|
|
export class AddNodeIds1658930531669 implements MigrationInterface {
|
|
name = 'AddNodeIds1658930531669';
|
|
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
logMigrationStart(this.name);
|
|
|
|
const tablePrefix = config.getEnv('database.tablePrefix');
|
|
|
|
const workflowsQuery = `
|
|
SELECT id, nodes
|
|
FROM "${tablePrefix}workflow_entity"
|
|
`;
|
|
|
|
// @ts-ignore
|
|
await runInBatches(queryRunner, workflowsQuery, (workflows) => {
|
|
workflows.forEach(async (workflow) => {
|
|
const nodes = JSON.parse(workflow.nodes);
|
|
nodes.forEach((node: INode) => {
|
|
if (!node.id) {
|
|
node.id = uuid();
|
|
}
|
|
});
|
|
|
|
const [updateQuery, updateParams] = queryRunner.connection.driver.escapeQueryWithParameters(
|
|
`
|
|
UPDATE "${tablePrefix}workflow_entity"
|
|
SET nodes = :nodes
|
|
WHERE id = '${workflow.id}'
|
|
`,
|
|
{ nodes: JSON.stringify(nodes) },
|
|
{},
|
|
);
|
|
|
|
queryRunner.query(updateQuery, updateParams);
|
|
});
|
|
});
|
|
|
|
logMigrationEnd(this.name);
|
|
}
|
|
|
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
const tablePrefix = config.getEnv('database.tablePrefix');
|
|
|
|
const workflowsQuery = `
|
|
SELECT id, nodes
|
|
FROM "${tablePrefix}workflow_entity"
|
|
`;
|
|
|
|
// @ts-ignore
|
|
await runInBatches(queryRunner, workflowsQuery, (workflows) => {
|
|
workflows.forEach(async (workflow) => {
|
|
const nodes = JSON.parse(workflow.nodes);
|
|
// @ts-ignore
|
|
nodes.forEach((node) => delete node.id);
|
|
|
|
const [updateQuery, updateParams] = queryRunner.connection.driver.escapeQueryWithParameters(
|
|
`
|
|
UPDATE "${tablePrefix}workflow_entity"
|
|
SET nodes = :nodes
|
|
WHERE id = '${workflow.id}'
|
|
`,
|
|
{ nodes: JSON.stringify(nodes) },
|
|
{},
|
|
);
|
|
|
|
queryRunner.query(updateQuery, updateParams);
|
|
});
|
|
});
|
|
}
|
|
}
|