plugin-postgresql-connector
Version:
NocoBase plugin for connecting to external PostgreSQL databases
132 lines • 4.11 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Connection = void 0;
const sequelize_1 = require("sequelize");
class Connection extends sequelize_1.Model {
static init(database) {
super.init({
id: {
type: sequelize_1.DataTypes.UUID,
defaultValue: sequelize_1.DataTypes.UUIDV4,
primaryKey: true,
},
name: {
type: sequelize_1.DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
notEmpty: true,
len: [1, 100],
},
},
host: {
type: sequelize_1.DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true,
},
},
port: {
type: sequelize_1.DataTypes.INTEGER,
defaultValue: 5432,
validate: {
min: 1,
max: 65535,
},
},
database: {
type: sequelize_1.DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true,
len: [1, 63],
},
},
username: {
type: sequelize_1.DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true,
len: [1, 63],
},
},
password: {
type: sequelize_1.DataTypes.TEXT, // Encrypted password
allowNull: false,
validate: {
notEmpty: true,
},
},
ssl: {
type: sequelize_1.DataTypes.BOOLEAN,
defaultValue: false,
},
isActive: {
type: sequelize_1.DataTypes.BOOLEAN,
defaultValue: true,
},
connectionOptions: {
type: sequelize_1.DataTypes.JSON,
defaultValue: {},
},
createdAt: {
type: sequelize_1.DataTypes.DATE,
defaultValue: sequelize_1.DataTypes.NOW,
},
updatedAt: {
type: sequelize_1.DataTypes.DATE,
defaultValue: sequelize_1.DataTypes.NOW,
},
}, {
sequelize: database.sequelize,
modelName: 'Connection',
tableName: 'postgresql_connections',
timestamps: true,
paranoid: true, // Soft delete
indexes: [
{
unique: true,
fields: ['name'],
where: {
deletedAt: null,
},
},
{
fields: ['isActive'],
},
],
});
}
static associate(models) {
this.hasMany(models.SavedQuery, {
foreignKey: 'connectionId',
as: 'savedQueries',
onDelete: 'CASCADE',
});
}
// Instance methods
async testConnection() {
// This will be implemented in service layer
return true;
}
getConnectionConfig() {
return {
host: this.getDataValue('host'),
port: this.getDataValue('port'),
database: this.getDataValue('database'),
username: this.getDataValue('username'),
password: this.getDataValue('password'), // Will be decrypted in service
ssl: this.getDataValue('ssl'),
connectionOptions: this.getDataValue('connectionOptions'),
};
}
// Hide sensitive data in JSON
toJSON() {
const values = { ...this.get() };
delete values.password;
return values;
}
}
exports.Connection = Connection;
exports.default = Connection;
//# sourceMappingURL=Connection.js.map