-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreateDatabase.js
More file actions
45 lines (38 loc) · 1.33 KB
/
createDatabase.js
File metadata and controls
45 lines (38 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
const { readdirSync } = require('fs');
const { basename: _basename, join } = require('path');
const Sequelize = require('sequelize');
const { createNamespace } = require('continuation-local-storage');
const { log } = require('./utils');
/**
* @typedef { function({[x: string]: object}, string): void } Hook
*/
/**
* create sequelize db
* @param {string} clsName CLS namespace name
* @param {string} dbUri dialect://username:password(at)host:port/database
* @param {Array<Hook>} modelHooks hooks
*/
module.exports = (clsName, dbUri, modelHooks) => {
const sequelizeNS = createNamespace(`sequel-cls-${clsName}`);
Sequelize.useCLS(sequelizeNS);
const sequelize = new Sequelize(dbUri, { logging: log });
const basename = _basename(__filename);
const files = readdirSync(__dirname)
.filter(file => (file.indexOf('.') > 0) && (file !== basename) && (file !== 'config.js'));
const db = {};
for (const file of files) {
const model = sequelize.const(join(__dirname, file));
db[model.name] = model;
}
for (const modelName of Object.keys(db)) {
if (db[modelName].associate) {
db[modelName].associate(db);
}
for (const hook of modelHooks) {
hook(db, modelName);
}
}
db.sequelize = sequelize;
db.Sequelize = Sequelize;
return db;
};