"use strict"; const fs = require("fs"); const path = require("path"); const Sequelize = require("sequelize"); const typedefs = require("../typedefs"); const logger = require("../utils/logger")(module); const basename = path.basename(__filename); const env = process.env.NODE_ENV || "development"; const config = require(__dirname + "/../config/sequelize.js")[env]; const db = {}; /** @type {typedefs.Sequelize} */ let sequelize; if (config.use_env_variable) { sequelize = new Sequelize(process.env[config.use_env_variable], config, { logging: (msg) => logger.debug(msg) }); } else { sequelize = new Sequelize(config.database, config.username, config.password, config, { logging: (msg) => logger.debug(msg) }); } (async () => { try { await sequelize.authenticate(); logger.info("Sequelize auth success"); } catch (error) { logger.error("Sequelize auth error", { err }); throw error; } })(); // Read model definitions from folder fs .readdirSync(__dirname) .filter(file => { return (file.indexOf(".") !== 0) && (file !== basename) && (file.slice(-3) === ".js"); }) .forEach(file => { const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes); db[model.name] = model; }); // Setup defined associations Object.keys(db).forEach(modelName => { if (db[modelName].associate) { db[modelName].associate(db); } }); db.sequelize = sequelize; db.Sequelize = Sequelize; module.exports = db;