the id is used in dependsOn by the UI to find the linked apps. if we had it as an uuid, we have to query the db a lot
52 lines
2.1 KiB
JavaScript
52 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
const async = require('async'),
|
|
hat = require('../src/hat.js');
|
|
|
|
exports.up = function(db, callback) {
|
|
db.all('SELECT * from backups', function (error, allBackups) {
|
|
if (error) return callback(error);
|
|
|
|
console.log(`Fixing up ${allBackups.length} backup entries`);
|
|
const idMap = {};
|
|
allBackups.forEach(b => {
|
|
b.remotePath = b.id;
|
|
b.id = `${b.type}_${b.identifier}_v${b.packageVersion}_${hat(256)}`; // id is used by the UI to derive dependent packages. making this a UUID will require a lot of db querying
|
|
idMap[b.remotePath] = b.id;
|
|
});
|
|
|
|
db.runSql('ALTER TABLE backups ADD COLUMN remotePath VARCHAR(256)', function (error) {
|
|
if (error) return callback(error);
|
|
|
|
db.runSql('ALTER TABLE backups CHANGE COLUMN dependsOn dependsOnJson TEXT', function (error) {
|
|
if (error) return callback(error);
|
|
|
|
async.eachSeries(allBackups, function (backup, iteratorDone) {
|
|
const dependsOnPaths = backup.dependsOn ? backup.dependsOn.split(',') : []; // previously, it was paths
|
|
let dependsOnIds = [];
|
|
dependsOnPaths.forEach(p => { if (idMap[p]) dependsOnIds.push(idMap[p]); });
|
|
|
|
db.runSql('UPDATE backups SET id = ?, remotePath = ?, dependsOnJson = ? WHERE id = ?', [ backup.id, backup.remotePath, JSON.stringify(dependsOnIds), backup.remotePath ], iteratorDone);
|
|
}, function (error) {
|
|
if (error) return callback(error);
|
|
|
|
db.runSql('ALTER TABLE backups MODIFY COLUMN remotePath VARCHAR(256) NOT NULL UNIQUE', callback);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
exports.down = function(db, callback) {
|
|
db.runSql('ALTER TABLE backups DROP COLUMN remotePath', function (error) {
|
|
if (error) console.error(error);
|
|
|
|
db.runSql('ALTER TABLE backups RENAME COLUMN dependsOnJson to dependsOn', function (error) {
|
|
if (error) return callback(error);
|
|
|
|
callback(error);
|
|
});
|
|
});
|
|
};
|
|
|