kns-floppy
Version:
89 lines (73 loc) • 2.63 kB
JavaScript
var Hoek = require("hoek");
var Sequelize = require("sequelize");
var Path = require("path");
var Plumber = require("kns-plumber");
var internals = {};
internals.defaults = {
host: "localhost",
logging: false,
port: "3306",
pass: "",
appRoot: ".",
migrationRoot: "/config/migrations/",
seedRoot: "/config/seeds/"
};
exports.register = function (plugin, options, next) {
options = Hoek.applyToDefaults(internals.defaults, options);
var sequelize = new Sequelize(options.env.database.name, options.env.database.user, options.env.database.pass, {
host: options.env.database.host,
port: options.env.database.port,
logging: options.env.database.logging
});
var migrator = sequelize.getMigrator({
path: options.migrationRoot
});
var disk = {
Sequelize: Sequelize,
sequelize: sequelize,
models: {}
};
/**
* FindModelFiles
*
* 1. Recursively search app plugin's for 'model' folder.
* 2. Every 'model' folder, it graps model files recursively
* in that directory.
*/
Plumber.pipeModels(options.appRoot).then(function (modelFiles) {
// Import all model files into sequelize
modelFiles.forEach(function (modelFile) {
var model = sequelize.import(modelFile.path);
disk.models[model.name] = model;
});
Object.keys(disk.models).forEach(function (modelName) {
if ( "associate" in disk.models[modelName] ) {
disk.models[modelName].associate(disk.models);
}
});
var isFirstTime = false;
sequelize.sync({force: false}).then(function () {
plugin.expose("disk", disk);
if ( isFirstTime ) {
isFirstTime = false;
console.log("*** First time run, executing seed files ***");
var seed_path = Path.join(options.seedRoot);
Plumber.pipeSeeds(seed_path).map(function (seedFile) {
return require(seedFile.path).seed(disk);
}).then(function () {
console.log("*** Seed file execution completed. ***");
next();
}).catch(function (e) {
console.log("*** Error: " + e + " ***");
process.exit(1);
});
}
else {
next();
}
});
});
};
exports.register.attributes = {
pkg: require('./package.json')
};