3 const eachSeries = require('async/eachSeries')
4 const fs = require('fs')
5 const path = require('path')
7 const constants = require('./constants')
8 const db = require('./database')
9 const logger = require('../helpers/logger')
15 function migrate (callback) {
16 db.Application.loadMigrationVersion(function (err, actualVersion) {
17 if (err) return callback(err)
19 // If there are a new migration scripts
20 if (actualVersion < constants.LAST_MIGRATION_VERSION) {
21 logger.info('Begin migrations.')
23 getMigrationScripts(function (err, migrationScripts) {
24 if (err) return callback(err)
26 eachSeries(migrationScripts, function (entity, callbackEach) {
27 executeMigration(actualVersion, entity, callbackEach)
29 if (err) return callback(err)
31 logger.info('Migrations finished. New migration version schema: %s', constants.LAST_MIGRATION_VERSION)
41 // ---------------------------------------------------------------------------
43 module.exports = migrator
45 // ---------------------------------------------------------------------------
47 function getMigrationScripts (callback) {
48 fs.readdir(path.join(__dirname, 'migrations'), function (err, files) {
49 if (err) return callback(err)
51 const filesToMigrate = []
53 files.forEach(function (file) {
54 // Filename is something like 'version-blabla.js'
55 const version = file.split('-')[0]
62 return callback(err, filesToMigrate)
66 function executeMigration (actualVersion, entity, callback) {
67 const versionScript = entity.version
69 // Do not execute old migration scripts
70 if (versionScript <= actualVersion) return callback(null)
72 // Load the migration module and run it
73 const migrationScriptName = entity.script
74 logger.info('Executing %s migration script.', migrationScriptName)
76 const migrationScript = require(path.join(__dirname, 'migrations', migrationScriptName))
78 db.sequelize.transaction().asCallback(function (err, t) {
79 if (err) return callback(err)
81 migrationScript.up({ transaction: t }, function (err) {
87 // Update the new migration version
88 db.Application.updateMigrationVersion(versionScript, t, function (err) {