71 lines
1.6 KiB
JavaScript
71 lines
1.6 KiB
JavaScript
"use strict";
|
|
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const Sequelize = require("sequelize");
|
|
const process = require("process");
|
|
const basename = path.basename(__filename);
|
|
let config;
|
|
|
|
try {
|
|
// Prefer legacy app-specific configuration when available
|
|
// eslint-disable-next-line import/no-dynamic-require, global-require
|
|
config = require("../app/config/db.config.js");
|
|
} catch (error) {
|
|
if (error.code !== "MODULE_NOT_FOUND") {
|
|
throw error;
|
|
}
|
|
// Fallback to the shared config loader
|
|
// eslint-disable-next-line import/no-dynamic-require, global-require
|
|
const appConfig = require("../src/config/config.js");
|
|
const dbConfig = appConfig.db || {};
|
|
config = {
|
|
database: dbConfig.name,
|
|
username: dbConfig.username,
|
|
password: dbConfig.password,
|
|
host: dbConfig.host,
|
|
port: dbConfig.port,
|
|
dialect: dbConfig.dialect,
|
|
logging: false
|
|
};
|
|
}
|
|
require("dotenv").config();
|
|
|
|
const db = {};
|
|
|
|
const sequelize = new Sequelize(
|
|
config.database,
|
|
config.username,
|
|
config.password,
|
|
config
|
|
);
|
|
|
|
fs.readdirSync(__dirname)
|
|
.filter((file) => {
|
|
return (
|
|
file.indexOf(".") !== 0 &&
|
|
file !== basename &&
|
|
file.slice(-3) === ".js" &&
|
|
file.indexOf(".test.js") === -1
|
|
);
|
|
})
|
|
.forEach((file) => {
|
|
const model = require(path.join(__dirname, file))(
|
|
sequelize,
|
|
Sequelize.DataTypes
|
|
);
|
|
db[model.name] = model;
|
|
});
|
|
|
|
Object.keys(db).forEach((modelName) => {
|
|
if (db[modelName].associate) {
|
|
db[modelName].associate(db);
|
|
}
|
|
});
|
|
|
|
db.sequelize = sequelize;
|
|
// db.Sequelize = Sequelize;
|
|
db.Op = Sequelize.Op;
|
|
|
|
module.exports = db;
|