From 3cb89dec8878da409b535729e3e1a9b70b0585ef Mon Sep 17 00:00:00 2001 From: rahulbile Date: Thu, 29 Dec 2016 17:20:54 +0530 Subject: [PATCH 1/7] feat: Add method to run migration script by name. --- lib/models/migration.js | 41 +++++++++++++++++++++++++++++++++++++++ lib/models/migration.json | 19 ++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/lib/models/migration.js b/lib/models/migration.js index e269325..b3361fa 100644 --- a/lib/models/migration.js +++ b/lib/models/migration.js @@ -44,6 +44,47 @@ module.exports = function(Migration, options) { return cb.promise; }; + /** + * Remote Method: Run specific migration by name. + * + * @param {String} [name] Name of migration script to run. + * @param {String} [record] Record the migration runtime to database. + * @param {Function} [cb] Callback function. + */ + Migration.migrateByName = function(name, record, cb) { + name = name || ''; + record = record || false; + cb = cb || utils.createPromiseCallback(); + assert(typeof name === 'string', 'The to argument must be a string, not ' + typeof name); + assert(typeof cb === 'function', 'The cb argument must be a function, not ' + typeof cb); + + Migration.log.info(name, 'running.'); + const scriptPath = path.resolve(path.join(Migration.migrationsDir, name)); + + try { + require(scriptPath).up(Migration.app, function(err) { + if (err) { + Migration.log.error(name, 'error:'); + Migration.log.error(err.stack); + Migration.finish(err); + return cb(err); + } else if (record) { + Migration.create({ + name: name, + runDtTm: new Date() + }); + } + }); + } catch (err) { + Migration.log.error('Error running migration', name); + Migration.log.error(err.stack); + Migration.finish(err); + cb(err); + } + + return cb.promise; + }; + /** * Run migrations (up or down). * diff --git a/lib/models/migration.json b/lib/models/migration.json index 5ba964b..8c0fba0 100644 --- a/lib/models/migration.json +++ b/lib/models/migration.json @@ -34,6 +34,25 @@ "description": "Name of the migration script to migrate to. If no name is provided all pending migrations will run." }] }, + "migrateByName": { + "description": "Run specific migration by name", + "isStatic": true, + "http": { + "path": "/migrateByName", + "verb": "get" + }, + "accepts": [{ + "arg": "name", + "type": "String", + "required": true, + "description": "Name of the migration script to run." + }, + { + "arg" : "record", + "type" : "boolean", + "required" : false + }] + }, "rollbackTo": { "description": "Rollback migrations", "isStatic": true, From 595f3f2d634bfe513a12c00226e2df0e195701f4 Mon Sep 17 00:00:00 2001 From: rahulbile Date: Wed, 4 Jan 2017 11:52:47 +0530 Subject: [PATCH 2/7] feat: Add method to run migration by name cleanup --- lib/models/migration.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/models/migration.js b/lib/models/migration.js index b3361fa..04f1cfd 100644 --- a/lib/models/migration.js +++ b/lib/models/migration.js @@ -52,7 +52,11 @@ module.exports = function(Migration, options) { * @param {Function} [cb] Callback function. */ Migration.migrateByName = function(name, record, cb) { - name = name || ''; + if (typeof cb === 'undefined' && typeof record === 'function') { + cb = record; + record = false; + } + record = record || false; cb = cb || utils.createPromiseCallback(); assert(typeof name === 'string', 'The to argument must be a string, not ' + typeof name); @@ -64,8 +68,7 @@ module.exports = function(Migration, options) { try { require(scriptPath).up(Migration.app, function(err) { if (err) { - Migration.log.error(name, 'error:'); - Migration.log.error(err.stack); + Migration.log.error(`Error running migration script ${name}:`, err); Migration.finish(err); return cb(err); } else if (record) { @@ -73,6 +76,7 @@ module.exports = function(Migration, options) { name: name, runDtTm: new Date() }); + cb(); } }); } catch (err) { From 9f6f5c346cccb33a3991d1d84e81eec103fa097d Mon Sep 17 00:00:00 2001 From: rahulbile Date: Wed, 4 Jan 2017 17:14:56 +0530 Subject: [PATCH 3/7] feat: Add method to run migration by name cleanup --- lib/models/migration.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/models/migration.js b/lib/models/migration.js index 04f1cfd..3ad26b1 100644 --- a/lib/models/migration.js +++ b/lib/models/migration.js @@ -76,12 +76,11 @@ module.exports = function(Migration, options) { name: name, runDtTm: new Date() }); - cb(); } + cb(); }); } catch (err) { - Migration.log.error('Error running migration', name); - Migration.log.error(err.stack); + Migration.log.error(`Error running migration script ${name}:`, err); Migration.finish(err); cb(err); } From a0a667c757ac7992488356f14535701f0ec9cebc Mon Sep 17 00:00:00 2001 From: rahulbile Date: Thu, 5 Jan 2017 17:59:06 +0530 Subject: [PATCH 4/7] feat: mark migration finish after runnnig successfully --- lib/models/migration.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/models/migration.js b/lib/models/migration.js index 3ad26b1..69a6709 100644 --- a/lib/models/migration.js +++ b/lib/models/migration.js @@ -77,6 +77,7 @@ module.exports = function(Migration, options) { runDtTm: new Date() }); } + Migration.finish(); cb(); }); } catch (err) { From 14a4dafdbb292ae6f206128f1806582c4205be92 Mon Sep 17 00:00:00 2001 From: rahulbile Date: Wed, 4 Jan 2017 11:52:47 +0530 Subject: [PATCH 5/7] feat: Add method to run migration by name cleanup --- lib/models/migration.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/models/migration.js b/lib/models/migration.js index 3ad26b1..cd5d8d6 100644 --- a/lib/models/migration.js +++ b/lib/models/migration.js @@ -76,6 +76,7 @@ module.exports = function(Migration, options) { name: name, runDtTm: new Date() }); + cb(); } cb(); }); From 11462ecb047a2aceddeebd5f1a4d1e37ff04a7f7 Mon Sep 17 00:00:00 2001 From: rahulbile Date: Wed, 4 Jan 2017 17:14:56 +0530 Subject: [PATCH 6/7] feat: Add method to run migration by name cleanup --- lib/models/migration.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/models/migration.js b/lib/models/migration.js index cd5d8d6..3ad26b1 100644 --- a/lib/models/migration.js +++ b/lib/models/migration.js @@ -76,7 +76,6 @@ module.exports = function(Migration, options) { name: name, runDtTm: new Date() }); - cb(); } cb(); }); From 80e0f29a5d9a8360c420181734f9d0cea31b92b1 Mon Sep 17 00:00:00 2001 From: rahulbile Date: Thu, 5 Jan 2017 17:59:06 +0530 Subject: [PATCH 7/7] feat: mark migration finish after runnnig successfully --- lib/models/migration.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/models/migration.js b/lib/models/migration.js index 3ad26b1..69a6709 100644 --- a/lib/models/migration.js +++ b/lib/models/migration.js @@ -77,6 +77,7 @@ module.exports = function(Migration, options) { runDtTm: new Date() }); } + Migration.finish(); cb(); }); } catch (err) {