UNPKG

node-tenancy

Version:

Automatic multi-tenancy for Node with support to Rabbitmq

79 lines (66 loc) 2.05 kB
const Config = require('../../utils/config'); const DatabaseDriver = require('../../utils/db'); const {Sequelize} = require('sequelize'); function getTenantModel(domain) { let model = null; const connection = DatabaseDriver.resolveCentralConnection(); if (!connection) { throw new Error(`No database connections found`); } else { const central_schemas = Config.getConfig()?.central_schemas; if (central_schemas) { DatabaseDriver.registerSchemas(connection, central_schemas); } else { throw new Error('No provided schemas found.'); } model = connection.models.Tenant; const domainModel = connection.models.Domain; return model.findOne({ include: { model: domainModel, where: { domain: domain }, }, }); } } function registerSchemas(connection, schemas = {}) { try { //defining models for (const modelDefiner of schemas) { modelDefiner(connection); } //applying associations for (const model_name in connection.models) { const model = connection.models[model_name]; if (model?.associate) { model.associate(connection.models); } } } catch (error) { throw error; } } function connect(connection, db_name, options = {}) { const dialect = process.env.DB_DRIVER; options.database = db_name; options.logging = options.logging || false; options.dialect = dialect; return new Sequelize(connection, options); } function getModel(model_name) { let connection_name = Config.getConfig()?.connection; switch (connection_name) { case 'tenant': return Config.getConfig()?.tenant_connection?.models[model_name]; case'central': return Config.getConfig()?.central_connection?.models[model_name]; default: throw new Error(`No database connections found.`); } } function getDefaultTenantSchema() { return require('../../schemas/sql/Tenant'); } module.exports = {getTenantModel, connect, registerSchemas, getModel, getDefaultTenantSchema};