From 662c97dcde1d263409b1cb974c20bc5b56eb6ad6 Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Fri, 24 Sep 2021 14:34:53 +0800 Subject: [PATCH] Fix: Fix importing tag if tag doesn't exist --- server/server.js | 64 ++++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/server/server.js b/server/server.js index a1916906..efb2cd2e 100644 --- a/server/server.js +++ b/server/server.js @@ -945,17 +945,17 @@ exports.entryPage = "dashboard"; socket.on("uploadBackup", async (uploadedJSON, importHandle, callback) => { try { - checkLogin(socket) + checkLogin(socket); let backupData = JSON.parse(uploadedJSON); - console.log(`Importing Backup, User ID: ${socket.userID}, Version: ${backupData.version}`) + console.log(`Importing Backup, User ID: ${socket.userID}, Version: ${backupData.version}`); let notificationListData = backupData.notificationList; let monitorListData = backupData.monitorList; - let version17x = compareVersions.compare(backupData.version, '1.7.0', '>=') - + let version17x = compareVersions.compare(backupData.version, "1.7.0", ">="); + // If the import option is "overwrite" it'll clear most of the tables, except "settings" and "user" if (importHandle == "overwrite") { // Stops every monitor first, so it doesn't execute any heartbeat while importing @@ -1050,38 +1050,38 @@ exports.entryPage = "dashboard"; // Only for backup files with the version 1.7.0 or higher, since there was the tag feature implemented if (version17x) { // Only import if the specific monitor has tags assigned - if (monitorListData[i].tags.length >= 1) { - for (let o = 0; o < monitorListData[i].tags.length; o++) { - - // Check if tag already exists and get data -> - let tag = await R.findOne("tag", " name = ?", [ - monitorListData[i].tags[o].name, - ]) - - // Set tagId to vaule from database - let tagId = tag.id - - // -> If it doesn't, create new tag from backup file - if (! tag) { - let beanTag = R.dispense("tag") - beanTag.name = monitorListData[i].tags[o].name - beanTag.color = monitorListData[i].tags[o].color - await R.store(beanTag) - - tagId = beanTag.id - } - - // Assign the new created tag to the monitor - await R.exec("INSERT INTO monitor_tag (tag_id, monitor_id, value) VALUES (?, ?, ?)", [ - tagId, - bean.id, - monitorListData[i].tags[o].value, - ]) + for (const oldTag of monitorListData[i].tags) { + + // Check if tag already exists and get data -> + let tag = await R.findOne("tag", " name = ?", [ + oldTag.name, + ]); + + let tagId; + if (! tag) { + // -> If it doesn't exist, create new tag from backup file + let beanTag = R.dispense("tag"); + beanTag.name = oldTag.name; + beanTag.color = oldTag.color; + await R.store(beanTag); + + tagId = beanTag.id; + } else { + // -> If it already exist, set tagId to value from database + tagId = tag.id; } + + // Assign the new created tag to the monitor + await R.exec("INSERT INTO monitor_tag (tag_id, monitor_id, value) VALUES (?, ?, ?)", [ + tagId, + bean.id, + oldTag.value, + ]); + } } - await updateMonitorNotification(bean.id, notificationIDList) + await updateMonitorNotification(bean.id, notificationIDList); // If monitor was active start it immediately, otherwise pause it if (monitorListData[i].active == 1) {