mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-25 12:44:07 -08:00
⚡ Added migrations to Sqlite and Mysql
This commit is contained in:
parent
cee5c522de
commit
84c4b32261
|
@ -40,11 +40,13 @@ import {
|
||||||
} from './databases/mongodb/migrations';
|
} from './databases/mongodb/migrations';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
InitialMigration1588157391238
|
InitialMigration1588157391238,
|
||||||
|
WebhookModel1592447867632,
|
||||||
} from './databases/mysqldb/migrations';
|
} from './databases/mysqldb/migrations';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
InitialMigration1588102412422
|
InitialMigration1588102412422,
|
||||||
|
WebhookModel1592445003908,
|
||||||
} from './databases/sqlite/migrations';
|
} from './databases/sqlite/migrations';
|
||||||
|
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
@ -100,7 +102,7 @@ export async function init(): Promise<IDatabaseCollections> {
|
||||||
password: await GenericHelpers.getConfigValue('database.mysqldb.password') as string,
|
password: await GenericHelpers.getConfigValue('database.mysqldb.password') as string,
|
||||||
port: await GenericHelpers.getConfigValue('database.mysqldb.port') as number,
|
port: await GenericHelpers.getConfigValue('database.mysqldb.port') as number,
|
||||||
username: await GenericHelpers.getConfigValue('database.mysqldb.user') as string,
|
username: await GenericHelpers.getConfigValue('database.mysqldb.user') as string,
|
||||||
migrations: [InitialMigration1588157391238],
|
migrations: [InitialMigration1588157391238, WebhookModel1592447867632],
|
||||||
migrationsRun: true,
|
migrationsRun: true,
|
||||||
migrationsTableName: `${entityPrefix}migrations`,
|
migrationsTableName: `${entityPrefix}migrations`,
|
||||||
};
|
};
|
||||||
|
@ -112,7 +114,7 @@ export async function init(): Promise<IDatabaseCollections> {
|
||||||
type: 'sqlite',
|
type: 'sqlite',
|
||||||
database: path.join(n8nFolder, 'database.sqlite'),
|
database: path.join(n8nFolder, 'database.sqlite'),
|
||||||
entityPrefix,
|
entityPrefix,
|
||||||
migrations: [InitialMigration1588102412422],
|
migrations: [InitialMigration1588102412422, WebhookModel1592445003908],
|
||||||
migrationsRun: true,
|
migrationsRun: true,
|
||||||
migrationsTableName: `${entityPrefix}migrations`,
|
migrationsTableName: `${entityPrefix}migrations`,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import {
|
import {
|
||||||
Column,
|
Column,
|
||||||
Entity,
|
Entity,
|
||||||
PrimaryColumn,
|
Index,
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
@ -9,15 +9,16 @@ import {
|
||||||
} from '../../Interfaces';
|
} from '../../Interfaces';
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
|
@Index(['webhookPath', 'method'], { unique: true })
|
||||||
export class WebhookEntity implements IWebhookDb {
|
export class WebhookEntity implements IWebhookDb {
|
||||||
|
|
||||||
@Column()
|
@Column()
|
||||||
workflowId: number;
|
workflowId: number;
|
||||||
|
|
||||||
@PrimaryColumn()
|
@Column()
|
||||||
webhookPath: string;
|
webhookPath: string;
|
||||||
|
|
||||||
@PrimaryColumn()
|
@Column()
|
||||||
method: string;
|
method: string;
|
||||||
|
|
||||||
@Column()
|
@Column()
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
import {
|
||||||
|
MigrationInterface,
|
||||||
|
QueryRunner,
|
||||||
|
} from 'typeorm';
|
||||||
|
|
||||||
|
import * as config from '../../../../config';
|
||||||
|
|
||||||
|
import {
|
||||||
|
IWorkflowDb,
|
||||||
|
NodeTypes,
|
||||||
|
WebhookHelpers,
|
||||||
|
} from '../../..';
|
||||||
|
|
||||||
|
import {
|
||||||
|
Workflow,
|
||||||
|
} from 'n8n-workflow/dist/src/Workflow';
|
||||||
|
|
||||||
|
import {
|
||||||
|
IWebhookDb,
|
||||||
|
} from '../../../Interfaces';
|
||||||
|
|
||||||
|
export class WebhookModel1592447867632 implements MigrationInterface {
|
||||||
|
name = 'WebhookModel1592447867632';
|
||||||
|
|
||||||
|
async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
const tablePrefix = config.get('database.tablePrefix');
|
||||||
|
|
||||||
|
await queryRunner.query(`CREATE TABLE IF NOT EXISTS ${tablePrefix}webhook_entity (workflowId int NOT NULL, webhookPath varchar(255) NOT NULL, method varchar(255) NOT NULL, node varchar(255) NOT NULL, PRIMARY KEY (webhookPath, method)) ENGINE=InnoDB`);
|
||||||
|
|
||||||
|
const workflows = await queryRunner.query(`SELECT * FROM ${tablePrefix}workflow_entity WHERE active=true`) as IWorkflowDb[];
|
||||||
|
const data: IWebhookDb[] = [];
|
||||||
|
const nodeTypes = NodeTypes();
|
||||||
|
for (const workflow of workflows) {
|
||||||
|
const workflowInstance = new Workflow({ id: workflow.id as string, name: workflow.name, nodes: workflow.nodes, connections: workflow.connections, active: workflow.active, nodeTypes, staticData: workflow.staticData, settings: workflow.settings });
|
||||||
|
const webhooks = WebhookHelpers.getWorkflowWebhooksBasic(workflowInstance);
|
||||||
|
for (const webhook of webhooks) {
|
||||||
|
data.push({
|
||||||
|
workflowId: workflowInstance.id as string,
|
||||||
|
webhookPath: webhook.path,
|
||||||
|
method: webhook.httpMethod,
|
||||||
|
node: webhook.node,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.length !== 0) {
|
||||||
|
await queryRunner.manager.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(`${tablePrefix}webhook_entity`)
|
||||||
|
.values(data)
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
const tablePrefix = config.get('database.tablePrefix');
|
||||||
|
await queryRunner.query(`DROP TABLE ${tablePrefix}webhook_entity`);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1 +1,2 @@
|
||||||
export * from './1588157391238-InitialMigration';
|
export * from './1588157391238-InitialMigration';
|
||||||
|
export * from './1592447867632-WebhookModel';
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
import {
|
||||||
|
MigrationInterface,
|
||||||
|
QueryRunner,
|
||||||
|
} from "typeorm";
|
||||||
|
|
||||||
|
import * as config from '../../../../config';
|
||||||
|
|
||||||
|
import {
|
||||||
|
IWorkflowDb,
|
||||||
|
NodeTypes,
|
||||||
|
WebhookHelpers,
|
||||||
|
} from '../../..';
|
||||||
|
|
||||||
|
import {
|
||||||
|
Workflow,
|
||||||
|
} from 'n8n-workflow/dist/src/Workflow';
|
||||||
|
|
||||||
|
import {
|
||||||
|
IWebhookDb,
|
||||||
|
} from '../../../Interfaces';
|
||||||
|
|
||||||
|
export class WebhookModel1592445003908 implements MigrationInterface {
|
||||||
|
name = 'WebhookModel1592445003908';
|
||||||
|
|
||||||
|
async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
const tablePrefix = config.get('database.tablePrefix');
|
||||||
|
|
||||||
|
await queryRunner.query(`CREATE TABLE IF NOT EXISTS ${tablePrefix}webhook_entity ("workflowId" integer NOT NULL, "webhookPath" varchar NOT NULL, "method" varchar NOT NULL, "node" varchar NOT NULL, PRIMARY KEY ("webhookPath", "method"))`);
|
||||||
|
|
||||||
|
const workflows = await queryRunner.query(`SELECT * FROM ${tablePrefix}workflow_entity WHERE active=true`) as IWorkflowDb[];
|
||||||
|
const data: IWebhookDb[] = [];
|
||||||
|
const nodeTypes = NodeTypes();
|
||||||
|
for (const workflow of workflows) {
|
||||||
|
const workflowInstance = new Workflow({ id: workflow.id as string, name: workflow.name, nodes: workflow.nodes, connections: workflow.connections, active: workflow.active, nodeTypes, staticData: workflow.staticData, settings: workflow.settings });
|
||||||
|
const webhooks = WebhookHelpers.getWorkflowWebhooksBasic(workflowInstance);
|
||||||
|
for (const webhook of webhooks) {
|
||||||
|
data.push({
|
||||||
|
workflowId: workflowInstance.id as string,
|
||||||
|
webhookPath: webhook.path,
|
||||||
|
method: webhook.httpMethod,
|
||||||
|
node: webhook.node,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.length !== 0) {
|
||||||
|
await queryRunner.manager.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(`${tablePrefix}webhook_entity`)
|
||||||
|
.values(data)
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
const tablePrefix = config.get('database.tablePrefix');
|
||||||
|
await queryRunner.query(`DROP TABLE ${tablePrefix}webhook_entity`);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1 +1,2 @@
|
||||||
export * from './1588102412422-InitialMigration';
|
export * from './1588102412422-InitialMigration';
|
||||||
|
export * from './1592445003908-WebhookModel';
|
||||||
|
|
Loading…
Reference in a new issue