From f204a85b44477f6a21380ce8b4d854195f3fd06f Mon Sep 17 00:00:00 2001 From: Nikola Ubavic <53820106+ubavic@users.noreply.github.com> Date: Fri, 26 Nov 2021 15:10:35 +0100 Subject: [PATCH] fix: machine unpair feat: add removed_devices table --- lib/pairing.js | 25 +++++++++++++------ ...637877732001-add_unpaired_devices_table.js | 22 ++++++++++++++++ 2 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 migrations/1637877732001-add_unpaired_devices_table.js diff --git a/lib/pairing.js b/lib/pairing.js index 7cdf4a99..7eb683a6 100644 --- a/lib/pairing.js +++ b/lib/pairing.js @@ -4,6 +4,7 @@ const readFile = pify(fs.readFile) const db = require('./db') const options = require('./options') const logger = require('./logger') +const uuid = require('uuid') // A machine on an older version (no multicassette code) could be paired with a server with multicassette code. // This makes sure that the server stores a default value @@ -16,15 +17,23 @@ function pullToken (token) { return db.one(sql, [token]) } +// TODO new-admin: We should remove all configs related to that device. This can get tricky. function unpair (deviceId) { - // TODO new-admin: We should remove all configs related to that device. This can get tricky. - return db.tx(t => { - const q1 = t.none('DELETE FROM devices WHERE device_id=$1', [deviceId]) - const q2 = t.none('DELETE FROM machine_pings WHERE device_id=$1', [deviceId]) - const q3 = t.none('DELETE FROM machine_network_heartbeat WHERE device_id=$1', [deviceId]) - const q4 = t.none('DELETE FROM machine_network_performance WHERE device_id=$1', [deviceId]) - return Promise.all([q1, q2, q3, q4]) - }) + const sql = `INSERT INTO + unpaired_devices(id, device_id, name, model, paired, unpaired) + VALUES ( + $1, + $2, + (SELECT name FROM devices WHERE device_id=$2), + (SELECT model FROM devices WHERE device_id=$2), + (SELECT created FROM devices WHERE device_id=$2), + now()); + DELETE FROM devices WHERE device_id=$2; + DELETE FROM machine_pings WHERE device_id=$2; + DELETE FROM machine_network_heartbeat WHERE device_id=$2; + DELETE FROM machine_network_performance WHERE device_id=$2;` + + return db.tx(t => t.none(sql, [uuid.v4(), deviceId])) } function pair (token, deviceId, machineModel, numOfCassettes = DEFAULT_NUMBER_OF_CASSETTES) { diff --git a/migrations/1637877732001-add_unpaired_devices_table.js b/migrations/1637877732001-add_unpaired_devices_table.js new file mode 100644 index 00000000..fc7ac278 --- /dev/null +++ b/migrations/1637877732001-add_unpaired_devices_table.js @@ -0,0 +1,22 @@ +var db = require('./db') + +exports.up = function (next) { + var sql = [ + `ALTER TABLE cashbox_batches + DROP CONSTRAINT cashbox_batches_device_id_fkey;`, + `CREATE TABLE IF NOT EXISTS unpaired_devices ( + id uuid PRIMARY KEY, + device_id text NOT NULL, + model text, + name text, + paired timestamp NOT NULL, + unpaired timestamp NOT NULL + )`, + ] + + db.multi(sql, next) +} + +exports.down = function (next) { + next() +}