/** * @file Database configuration and model initialization for Sequelize. * Initializes the Sequelize ORM based on environment settings and loads database models. * Provides access to the Sequelize instance and loaded models. */ 'use strict'; const fs = require('fs'); const path = require('path'); const Sequelize = require('sequelize'); const process = require('process'); /** * Base filename of the current file * @type {string} */ const basename = path.basename(__filename); /** * Current environment (development/production/test) * @type {string} */ const env = process.env.NODE_ENV || 'development'; /** * Database configuration for the current environment * @type {Object} */ const config = require(__dirname + '/../config/config.js')[env]; /** * Object containing all database models and Sequelize instances * @type {Object} */ const db = {}; /** * Sequelize instance for database connection * @type {Sequelize} */ let sequelize; // Initialize Sequelize with environment config or direct config if (config.use_env_variable) { sequelize = new Sequelize(process.env[config.use_env_variable], config); } else { sequelize = new Sequelize(config.database, config.username, config.password, config); } /** * Load all model files from current directory and initialize them */ fs .readdirSync(__dirname) .filter(file => { return ( file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js' && file.indexOf('.test.js') === -1 ); }) .forEach(file => { /** * Initialize model from file * @type {Sequelize.Model} */ const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes); db[model.name] = model; }); /** * Set up model associations if defined */ Object.keys(db).forEach(modelName => { if (db[modelName].associate) { db[modelName].associate(db); } }); // Add Sequelize instances to db object db.sequelize = sequelize; db.Sequelize = Sequelize; module.exports = db;