diff options
Diffstat (limited to 'src/internal-server/start/migrate.js')
-rw-r--r-- | src/internal-server/start/migrate.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/internal-server/start/migrate.js b/src/internal-server/start/migrate.js new file mode 100644 index 000000000..c27e07bc5 --- /dev/null +++ b/src/internal-server/start/migrate.js | |||
@@ -0,0 +1,46 @@ | |||
1 | const { ferdiVersion } = require('../../environment'); | ||
2 | |||
3 | /** | ||
4 | * Migrate server database to work with current Ferdi version | ||
5 | */ | ||
6 | const Database = use('Database'); | ||
7 | const User = use('App/Models/User'); | ||
8 | |||
9 | const migrateLog = (text) => { | ||
10 | console.log('\x1b[36m%s\x1b[0m', 'Ferdi Migration:', '\x1b[0m', text); | ||
11 | }; | ||
12 | |||
13 | module.exports = async () => { | ||
14 | migrateLog('🧙 Running database migration wizard'); | ||
15 | |||
16 | // Make sure user table exists | ||
17 | await Database.raw('CREATE TABLE IF NOT EXISTS `users` (`id` integer not null primary key autoincrement, `settings` text, `created_at` datetime, `updated_at` datetime);'); | ||
18 | |||
19 | const user = await User.find(1); | ||
20 | let settings; | ||
21 | if (!user) { | ||
22 | migrateLog('🎩 Migrating from old Ferdi version as user doesn\'t exist'); | ||
23 | |||
24 | // Create new user | ||
25 | await Database.raw('INSERT INTO "users" ("id") VALUES (\'1\');'); | ||
26 | } else { | ||
27 | settings = typeof user.settings === 'string' ? JSON.parse(user.settings) : user.settings; | ||
28 | } | ||
29 | |||
30 | if (!settings || !settings.db_version || settings.db_version !== ferdiVersion) { | ||
31 | const srcVersion = settings && settings.db_version ? settings.db_version : '5.4.0-beta.2'; | ||
32 | migrateLog(`🔮 Migrating table from ${srcVersion} to ${ferdiVersion}`); | ||
33 | |||
34 | // Migrate database to current Ferdi version | ||
35 | // Currently no migrations | ||
36 | |||
37 | // Update version number in database | ||
38 | if (!settings) settings = {}; | ||
39 | settings.db_version = ferdiVersion; | ||
40 | const newUser = await User.find(1); // Fetch user again as we might have only just created it | ||
41 | newUser.settings = JSON.stringify(settings); | ||
42 | await newUser.save(); | ||
43 | } else { | ||
44 | migrateLog('🔧 Nothing to migrate, already on the newest version'); | ||
45 | } | ||
46 | }; | ||