2016-10-10 14:27:31 +02:00
|
|
|
var path = require('path'),
|
|
|
|
_ = require('lodash'),
|
|
|
|
fs = require('fs'),
|
|
|
|
database = require('./database'),
|
2016-10-10 19:31:32 +02:00
|
|
|
errors = require('./errors'),
|
2016-10-10 14:27:31 +02:00
|
|
|
logging = require('../../../logging');
|
|
|
|
|
|
|
|
exports.readTasks = function readTasks(absolutePath) {
|
|
|
|
var files = [],
|
|
|
|
tasks = [];
|
|
|
|
|
|
|
|
try {
|
|
|
|
files = fs.readdirSync(absolutePath);
|
|
|
|
|
|
|
|
_.each(files, function (file) {
|
|
|
|
tasks.push({
|
|
|
|
execute: require(path.join(absolutePath, file)),
|
|
|
|
name: file
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
return tasks;
|
|
|
|
} catch (err) {
|
2016-10-10 19:31:32 +02:00
|
|
|
throw new errors.SephirothError({err: err});
|
2016-10-10 14:27:31 +02:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.createTransaction = function createTransaction(callback) {
|
|
|
|
return database.knex.transaction(callback);
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* each migration file get's saved into the database
|
|
|
|
* @TODO: add version
|
|
|
|
*/
|
|
|
|
exports.preTask = function preTask(options) {
|
|
|
|
options = options || {};
|
|
|
|
|
|
|
|
var localDatabase = options.database,
|
|
|
|
task = options.task,
|
|
|
|
type = options.type;
|
|
|
|
|
|
|
|
return (localDatabase || database.knex)('migrations')
|
|
|
|
.then(function (migrations) {
|
|
|
|
if (!migrations.length) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_.find(migrations, {name: task, type: type})) {
|
2016-10-10 19:31:32 +02:00
|
|
|
throw new errors.MigrationExistsError();
|
2016-10-10 14:27:31 +02:00
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(function (err) {
|
|
|
|
// CASE: table does not exist
|
2016-10-10 19:31:32 +02:00
|
|
|
if (err.errno === 1 || err.errno === 1146) {
|
2016-10-10 14:27:31 +02:00
|
|
|
logging.info('Creating table: migrations');
|
|
|
|
|
|
|
|
return (localDatabase || database.knex).schema.createTable('migrations', function (table) {
|
|
|
|
table.string('name');
|
|
|
|
table.string('type');
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
throw err;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* write migration key
|
|
|
|
*/
|
|
|
|
exports.postTask = function postTask(options) {
|
|
|
|
options = options || {};
|
|
|
|
|
|
|
|
var localDatabase = options.database,
|
|
|
|
task = options.task,
|
|
|
|
type = options.type;
|
|
|
|
|
|
|
|
return (localDatabase || database.knex)('migrations')
|
|
|
|
.insert({
|
|
|
|
name: task,
|
|
|
|
type: type
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* - check init
|
|
|
|
* - check seed
|
|
|
|
*
|
|
|
|
* @TODO: optimise!
|
|
|
|
*/
|
|
|
|
exports.isDatabaseOK = function isDatabaseOK(options) {
|
|
|
|
options = options || {};
|
|
|
|
|
|
|
|
var localDatabase = options.database;
|
|
|
|
|
|
|
|
return (localDatabase || database.knex)('migrations')
|
|
|
|
.then(function (migrations) {
|
|
|
|
if (_.find(migrations, {type: 'init'})) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-10-10 19:31:32 +02:00
|
|
|
throw new errors.DatabaseIsNotOkError({
|
|
|
|
message: 'Please run node core/server/data/sephiroth/bin/sephiroth init.',
|
|
|
|
code: 'DB_NOT_INITIALISED'
|
|
|
|
});
|
2016-10-10 14:27:31 +02:00
|
|
|
})
|
|
|
|
.catch(function (err) {
|
2016-10-10 19:31:32 +02:00
|
|
|
if (err.errno === 1 || err.errno === 1146) {
|
|
|
|
throw new errors.DatabaseIsNotOkError({
|
|
|
|
message: 'Please run node core/server/data/sephiroth/bin/sephiroth init.',
|
|
|
|
code: 'MIGRATION_TABLE_IS_MISSING'
|
|
|
|
});
|
2016-10-10 14:27:31 +02:00
|
|
|
}
|
|
|
|
|
2016-10-10 19:31:32 +02:00
|
|
|
throw new errors.SephirothError({
|
|
|
|
err: err
|
|
|
|
});
|
2016-10-10 14:27:31 +02:00
|
|
|
});
|
|
|
|
};
|