Added migrations to Sqlite and Mysql

This commit is contained in:
ricardo 2020-06-17 23:42:04 -04:00
parent cee5c522de
commit 84c4b32261
6 changed files with 132 additions and 9 deletions

View file

@ -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`,
}; };

View file

@ -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()

View file

@ -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`);
}
}

View file

@ -1 +1,2 @@
export * from './1588157391238-InitialMigration'; export * from './1588157391238-InitialMigration';
export * from './1592447867632-WebhookModel';

View file

@ -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`);
}
}

View file

@ -1 +1,2 @@
export * from './1588102412422-InitialMigration'; export * from './1588102412422-InitialMigration';
export * from './1592445003908-WebhookModel';