UNPKG

plugin-postgresql-connector

Version:

NocoBase plugin for connecting to external PostgreSQL databases

203 lines 7.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const server_1 = require("@nocobase/server"); class default_1 extends server_1.Migration { async up() { const { db } = this.context; // Create postgresql_connections table await db.sequelize.getQueryInterface().createTable('postgresql_connections', { id: { type: 'UUID', defaultValue: db.sequelize.literal('uuid_generate_v4()'), primaryKey: true, allowNull: false, }, name: { type: 'VARCHAR(100)', allowNull: false, unique: true, }, host: { type: 'VARCHAR(255)', allowNull: false, }, port: { type: 'INTEGER', defaultValue: 5432, allowNull: false, }, database: { type: 'VARCHAR(63)', allowNull: false, }, username: { type: 'VARCHAR(63)', allowNull: false, }, password: { type: 'TEXT', allowNull: false, comment: 'Encrypted password', }, ssl: { type: 'BOOLEAN', defaultValue: false, allowNull: false, }, isActive: { type: 'BOOLEAN', defaultValue: true, allowNull: false, }, connectionOptions: { type: 'JSONB', defaultValue: '{}', allowNull: false, }, createdAt: { type: 'TIMESTAMPTZ', defaultValue: db.sequelize.literal('CURRENT_TIMESTAMP'), allowNull: false, }, updatedAt: { type: 'TIMESTAMPTZ', defaultValue: db.sequelize.literal('CURRENT_TIMESTAMP'), allowNull: false, }, deletedAt: { type: 'TIMESTAMPTZ', allowNull: true, }, }); // Create indexes for postgresql_connections await db.sequelize.getQueryInterface().addIndex('postgresql_connections', ['name'], { unique: true, where: { deletedAt: null }, name: 'postgresql_connections_name_unique', }); await db.sequelize.getQueryInterface().addIndex('postgresql_connections', ['isActive'], { name: 'postgresql_connections_isActive_idx', }); await db.sequelize.getQueryInterface().addIndex('postgresql_connections', ['createdAt'], { name: 'postgresql_connections_createdAt_idx', }); // Create postgresql_saved_queries table await db.sequelize.getQueryInterface().createTable('postgresql_saved_queries', { id: { type: 'UUID', defaultValue: db.sequelize.literal('uuid_generate_v4()'), primaryKey: true, allowNull: false, }, connectionId: { type: 'UUID', allowNull: false, references: { model: 'postgresql_connections', key: 'id', }, onUpdate: 'CASCADE', onDelete: 'CASCADE', }, name: { type: 'VARCHAR(255)', allowNull: false, }, query: { type: 'TEXT', allowNull: false, }, queryType: { type: 'ENUM("SELECT", "INSERT", "UPDATE", "DELETE", "PROCEDURE", "FUNCTION", "VIEW", "OTHER")', defaultValue: 'SELECT', allowNull: false, }, parameters: { type: 'JSONB', defaultValue: '[]', allowNull: false, }, description: { type: 'TEXT', allowNull: true, }, category: { type: 'VARCHAR(100)', defaultValue: 'general', allowNull: true, }, tags: { type: 'JSONB', defaultValue: '[]', allowNull: false, }, isPublic: { type: 'BOOLEAN', defaultValue: false, allowNull: false, }, executionCount: { type: 'INTEGER', defaultValue: 0, allowNull: false, }, lastExecutedAt: { type: 'TIMESTAMPTZ', allowNull: true, }, createdBy: { type: 'UUID', allowNull: true, comment: 'Future: User ID reference', }, createdAt: { type: 'TIMESTAMPTZ', defaultValue: db.sequelize.literal('CURRENT_TIMESTAMP'), allowNull: false, }, updatedAt: { type: 'TIMESTAMPTZ', defaultValue: db.sequelize.literal('CURRENT_TIMESTAMP'), allowNull: false, }, deletedAt: { type: 'TIMESTAMPTZ', allowNull: true, }, }); // Create indexes for postgresql_saved_queries await db.sequelize.getQueryInterface().addIndex('postgresql_saved_queries', ['connectionId'], { name: 'postgresql_saved_queries_connectionId_idx', }); await db.sequelize.getQueryInterface().addIndex('postgresql_saved_queries', ['queryType'], { name: 'postgresql_saved_queries_queryType_idx', }); await db.sequelize.getQueryInterface().addIndex('postgresql_saved_queries', ['category'], { name: 'postgresql_saved_queries_category_idx', }); await db.sequelize.getQueryInterface().addIndex('postgresql_saved_queries', ['isPublic'], { name: 'postgresql_saved_queries_isPublic_idx', }); await db.sequelize.getQueryInterface().addIndex('postgresql_saved_queries', ['createdBy'], { name: 'postgresql_saved_queries_createdBy_idx', }); await db.sequelize.getQueryInterface().addIndex('postgresql_saved_queries', ['name', 'connectionId'], { unique: true, where: { deletedAt: null }, name: 'postgresql_saved_queries_name_connectionId_unique', }); await db.sequelize.getQueryInterface().addIndex('postgresql_saved_queries', ['createdAt'], { name: 'postgresql_saved_queries_createdAt_idx', }); console.log('PostgreSQL Connector tables created successfully'); } async down() { const { db } = this.context; // Drop tables in reverse order due to foreign key constraints await db.sequelize.getQueryInterface().dropTable('postgresql_saved_queries'); await db.sequelize.getQueryInterface().dropTable('postgresql_connections'); console.log('PostgreSQL Connector tables dropped successfully'); } } exports.default = default_1; //# sourceMappingURL=20241201000000-init.js.map