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 1/5] 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() +} From 1b94b5db4287c519c1a8e24bfe6a24958e001e7b Mon Sep 17 00:00:00 2001 From: Nikola Ubavic <53820106+ubavic@users.noreply.github.com> Date: Mon, 29 Nov 2021 13:45:46 +0100 Subject: [PATCH 2/5] chore: separate queries --- lib/pairing.js | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/pairing.js b/lib/pairing.js index 7eb683a6..d919300d 100644 --- a/lib/pairing.js +++ b/lib/pairing.js @@ -19,21 +19,25 @@ function pullToken (token) { // TODO new-admin: We should remove all configs related to that device. This can get tricky. function unpair (deviceId) { - 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])) + return db.tx(t => + t.none(`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() + )`, [uuid.v4(), deviceId]) + .then(() => { + 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]) + }) + ) } function pair (token, deviceId, machineModel, numOfCassettes = DEFAULT_NUMBER_OF_CASSETTES) { From 30195e0ea6141cbfdb1e5389797b3054b75bf3d1 Mon Sep 17 00:00:00 2001 From: Nikola Ubavic <53820106+ubavic@users.noreply.github.com> Date: Mon, 29 Nov 2021 14:05:10 +0100 Subject: [PATCH 3/5] fix: use spex batch --- lib/pairing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pairing.js b/lib/pairing.js index d919300d..c498d266 100644 --- a/lib/pairing.js +++ b/lib/pairing.js @@ -35,7 +35,7 @@ function unpair (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]) + return t.batch([q1, q2, q3, q4]) }) ) } From f7d0dd3af4a82d4e5cd307a8d96686e8eb8c027b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Ubavi=C4=87?= <53820106+ubavic@users.noreply.github.com> Date: Mon, 29 Nov 2021 14:33:25 +0100 Subject: [PATCH 4/5] chore: extra space Co-authored-by: chaotixkilla --- lib/pairing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pairing.js b/lib/pairing.js index c498d266..b848b859 100644 --- a/lib/pairing.js +++ b/lib/pairing.js @@ -35,7 +35,7 @@ function unpair (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 t.batch([q1, q2, q3, q4]) + return t.batch([q1, q2, q3, q4]) }) ) } From c93763a3a69f3b0a00e6a24afefc905956ea1ed0 Mon Sep 17 00:00:00 2001 From: Nikola Ubavic <53820106+ubavic@users.noreply.github.com> Date: Wed, 1 Dec 2021 17:54:32 +0100 Subject: [PATCH 5/5] chore: accept sugesttion --- lib/pairing.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/pairing.js b/lib/pairing.js index c498d266..42171cd3 100644 --- a/lib/pairing.js +++ b/lib/pairing.js @@ -20,16 +20,11 @@ function pullToken (token) { // TODO new-admin: We should remove all configs related to that device. This can get tricky. function unpair (deviceId) { return db.tx(t => - t.none(`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() - )`, [uuid.v4(), deviceId]) + t.none(`INSERT INTO unpaired_devices(id, device_id, name, model, paired, unpaired) + SELECT $1, $2, d.name, d.model, d.created, now() + FROM devices d + WHERE device_id=$2` + , [uuid.v4(), deviceId]) .then(() => { 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])