Skip to content

Instantly share code, notes, and snippets.

@shofetim
Created June 14, 2016 15:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shofetim/12dd4e69412226e5f16c0538f5b6ce87 to your computer and use it in GitHub Desktop.
Save shofetim/12dd4e69412226e5f16c0538f5b6ce87 to your computer and use it in GitHub Desktop.
'user strict';
var Sequelize = require('sequelize');
var env = process.env;
var log = console.log.bind(console);
var sequelize = new Sequelize(env.META_DB_NAME, env.META_DB_USER, env.META_DB_PASS, {
host: env.META_DB_HOST,
port: env.META_DB_PORT,
dialect: 'mssql',
pool: {
max: 5,
min: 0,
idle: 10000
}
});
var Instance = sequelize.define('instance', {
name: Sequelize.STRING
});
var Project = sequelize.define('project', {
name: Sequelize.STRING,
description: Sequelize.TEXT
});
Project.belongsTo(Instance);
var File = sequelize.define('file', {
name: Sequelize.STRING,
originalName: Sequelize.TEXT,
status: Sequelize.ENUM('Queued', 'Loading', 'Loaded', 'Fingerprinting', 'Guilting'),
columnCount: Sequelize.INTEGER,
recordCount: Sequelize.INTEGER,
byteSize: Sequelize.BIGINT,
sourceDirectory: Sequelize.TEXT
});
File.belongsTo(Project);
var Layout = sequelize.define('layout', {
encoding: Sequelize.TEXT,
fieldDelimiter: Sequelize.TEXT,
format: Sequelize.TEXT,
header: Sequelize.BOOLEAN,
trailer: Sequelize.BOOLEAN,
notes: Sequelize.TEXT,
recordDelimiter: Sequelize.TEXT
});
Layout.belongsTo(File);
var Field = sequelize.define('field', {
header: Sequelize.STRING,
maxLength: Sequelize.INTEGER,
notes: Sequelize.STRING,
position: Sequelize.INTEGER,
standardName: Sequelize.TEXT,
type: Sequelize.ENUM('alpha', 'digit', 'punct', 'empty', 'alphanum', 'string', 'number')
});
Field.belongsTo(Layout);
var Job = sequelize.define('job', {
name: Sequelize.STRING,
status: Sequelize.ENUM('Running', 'Complete', 'Error', 'Stopped', 'Paused')
});
Job.belongsTo(File);
var init = function () {
return new Promise(function (resolve, reject) {
sequelize
.authenticate()
.then(function () {
log('MetaData DB Connection has been established successfully.');
Promise.all([
Instance.sync(),
Project.sync(),
File.sync(),
Layout.sync(),
Field.sync(),
Job.sync()])
.then(function () {
log('Meta Schema Created');
return resolve(true);
})
.catch(function (err) {
log(err);
return reject(err);
});
})
.catch(function (err) {
log('Unable to connect to the MetaData database:', err);
});
});
};
exports.Instance = Instance;
exports.Project = Project;
exports.File = File;
exports.Layout = Layout;
exports.Job = Job;
exports.Field = Field;
exports.init = init;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment