aboutsummaryrefslogtreecommitdiffstats
path: root/src/internal-server/start/migrate.js
blob: 97cefcc54d9697dea66c270922d24bc3651d922f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const { ferdiVersion } = require('../../environment-remote');

/**
 * Migrate server database to work with current Ferdi version
 */
const Database = use('Database');
const User = use('App/Models/User');

const migrateLog = text => {
  console.log('\u001B[36m%s\u001B[0m', 'Ferdi Migration:', '\u001B[0m', text);
};

module.exports = async () => {
  migrateLog('🧙‍  Running database migration wizard');

  // Make sure user table exists
  await Database.raw(
    'CREATE TABLE IF NOT EXISTS `users` (`id` integer not null primary key autoincrement, `settings` text, `created_at` datetime, `updated_at` datetime);',
  );

  const user = await User.find(1);
  let settings;
  if (!user) {
    migrateLog("🎩  Migrating from old Ferdi version as user doesn't exist");

    // Create new user
    await Database.raw('INSERT INTO  "users" ("id") VALUES (\'1\');');
  } else {
    settings =
      typeof user.settings === 'string'
        ? JSON.parse(user.settings)
        : user.settings;
  }

  if (
    !settings ||
    !settings.db_version ||
    settings.db_version !== ferdiVersion
  ) {
    const srcVersion =
      settings && settings.db_version ? settings.db_version : '5.4.0-beta.2';
    migrateLog(`🔮  Migrating table from ${srcVersion} to ${ferdiVersion}`);

    // Migrate database to current Ferdi version
    // Currently no migrations

    // Update version number in database
    if (!settings) settings = {};
    settings.db_version = ferdiVersion;
    const newUser = await User.find(1); // Fetch user again as we might have only just created it
    newUser.settings = JSON.stringify(settings);
    await newUser.save();
  } else {
    migrateLog('🔧  Nothing to migrate, already on the newest version');
  }
};