From 26c82ac7e60a11211e5006d7da97d3f488e143bc Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs Date: Wed, 29 May 2019 11:35:10 +0100 Subject: [PATCH] Create the rest of the repositories, but it isn't tested yet. --- server/Models/RSSI.mjs | 17 ------------ server/Models/Reading.mjs | 40 ----------------------------- server/Repos.SQLite/GatewayRepo.mjs | 32 +++++++++++++++++++++++ server/Repos.SQLite/RSSIRepo.mjs | 34 ++++++++++++++++++++++++ server/Repos.SQLite/ReadingRepo.mjs | 32 +++++++++++++---------- server/db_template.sql | 8 ++---- 6 files changed, 87 insertions(+), 76 deletions(-) delete mode 100644 server/Models/RSSI.mjs delete mode 100644 server/Models/Reading.mjs create mode 100644 server/Repos.SQLite/GatewayRepo.mjs create mode 100644 server/Repos.SQLite/RSSIRepo.mjs diff --git a/server/Models/RSSI.mjs b/server/Models/RSSI.mjs deleted file mode 100644 index 7032eda..0000000 --- a/server/Models/RSSI.mjs +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; - -/** - * The received signal strength of a message from a single gateway. - * @param {number} id The id of this rssi measurement. - * @param {number} gateway_id The id of this gateway. - * @param {number} rssi The rssi measurement. - */ -class RSSI { - constructor(id, gateway_id, rssi) { - this.id = id; - this.gateway_id = gateway_id; - this.rssi = rssi; - } -} - -export default RSSI; diff --git a/server/Models/Reading.mjs b/server/Models/Reading.mjs deleted file mode 100644 index 4d7a26a..0000000 --- a/server/Models/Reading.mjs +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; - -import RSSIRepo from '../Repos.SQLite/RSSIRepo.mjs'; -import RSSI from './RSSI.mjs'; - -/** - * A single data reading received over the TTN. - * @param {string} id The id of this reading. - * @param {number} lat The latitude at which this reading was taken. - * @param {number} long The longitude at which this reading was taken. - * @param {RSSI[]} rssis An array of RSSI objects containing the signal strengths, as reported by 1 or mroe gateways. - */ -class Reading { - constructor(id, lat, long, rssis) { - /** @type {string} */ - this.id = id; - /** @type {number} */ - this.lat = lat; - /** @type {number} */ - this.long = long; - /** @type {RSSI[]} */ - this.rssis = rssis; - } - - /** - * Returns the RSSI reading for the strongest received signal strength. - * @return {RSSI|null} The RSSI object that contains the strongest received signal strength. - */ - get best_rssi() { - if(this.rssis.length == 0) - return null; - - return this.rssis.reduce( - (prev, next) => prev.rssi > next.rssi ? prev : next, - this.rssis[0] - ); - } -} - -export default Reading; diff --git a/server/Repos.SQLite/GatewayRepo.mjs b/server/Repos.SQLite/GatewayRepo.mjs new file mode 100644 index 0000000..c4b0920 --- /dev/null +++ b/server/Repos.SQLite/GatewayRepo.mjs @@ -0,0 +1,32 @@ +"use strict"; + +import { get_instance } from '../Helpers/Database.mjs'; + + +class GatewayRepo { + constructor() { + this.db = get_instance(); + } + + add(...gateways) { + if(typeof this.query_insert == "undefined") + this.query_insert = this.db.prepare(`INSERT INTO gateways ( + id, + lat, long, + altitude + ) VALUES ( + :id, + :lat, :long, + :altitude + )`); + + for(let gateway of gateways) + this.insert_query.run(gateway); + } + + iterate() { + return this.db.prepare(`SELECT * FROM gateways`).iterate(); + } +} + +export default ReadingRepo; diff --git a/server/Repos.SQLite/RSSIRepo.mjs b/server/Repos.SQLite/RSSIRepo.mjs new file mode 100644 index 0000000..d57d17a --- /dev/null +++ b/server/Repos.SQLite/RSSIRepo.mjs @@ -0,0 +1,34 @@ +"use strict"; + +import { get_instance } from '../Helpers/Database.mjs'; + + +class RSSIRepo { + constructor() { + this.db = get_instance(); + } + + add(...rssis) { + if(typeof this.query_insert == "undefined") + this.query_insert = this.db.prepare(`INSERT INTO rssis ( + id, + reading_id, + rssi, snr, + channel + ) VALUES ( + :id, + :reading_id, + :rssi, :snr, + :channel + )`); + + for(let rssi of rssis) + this.insert_query.run(rssi); + } + + iterate() { + return this.db.prepare(`SELECT * FROM rssis`).iterate(); + } +} + +export default ReadingRepo; diff --git a/server/Repos.SQLite/ReadingRepo.mjs b/server/Repos.SQLite/ReadingRepo.mjs index c0ca1ee..91e3944 100644 --- a/server/Repos.SQLite/ReadingRepo.mjs +++ b/server/Repos.SQLite/ReadingRepo.mjs @@ -2,27 +2,33 @@ import { get_instance } from '../Helpers/Database.mjs'; -import Reading from '../Models/Reading.mjs'; - class ReadingRepo { constructor(in_RSSIRepo) { this.db = get_instance(); this.RSSIRepo = in_RSSIRepo; - this.insert_query = this.db.prepare(`INSERT INTO readings ( - id, - lat, long, - data_rate_id, code_rate, bit_rate - ) VALUES ( - :id, - :lat, - :long, - :data_rate_id, :code_rate, :bit_rate - )`); } add(reading) { - this.insert_query + if(typeof this.query_insert == "undefined") + this.query_insert = this.db.prepare(`INSERT INTO readings ( + id, + lat, long, + data_rate_id, code_rate, bit_rate + ) VALUES ( + :id, + :lat, + :long, + :data_rate_id, :code_rate, :bit_rate + )`); + + this.insert_query.run(reading); + + this.RSSIRepo.add(...reading.rssis); + } + + iterate() { + return this.db.prepare(`SELECT * FROM readings`).iterate(); } } diff --git a/server/db_template.sql b/server/db_template.sql index 0ffafd3..150679c 100644 --- a/server/db_template.sql +++ b/server/db_template.sql @@ -3,7 +3,7 @@ CREATE TABLE readings IF NOT EXISTS ( id INTEGER PRIMARY KEY, -- Random unique integer lat FLOAT NOT NULL, -- Latitude component of GPS co-ordinates of reading long FLOAT NOT NULL, -- Longitude component of GPS co-ordinates of reading, - data_rate_id INTEGER, -- The id of the data rate code in the data_rates table that describes the data rate at which the message was transmitted + data_rate TEXT NOT NULL, -- The id of the data rate code in the data_rates table that describes the data rate at which the message was transmitted code_rate TEXT, -- The coding rate at which the message was transmitted. FUTURE: This may need to be an INTEGER field - not sure bit_rate INTEGER, -- The bit rate at which the message was transmitted ); @@ -18,13 +18,9 @@ CREATE TABLE rssis IF NOT EXISTS ( CREATE TABLE gateways IF NOT EXISTS ( id TEXT PRIMARY KEY, -- The gateway's name lat FLOAT, -- Latitude component of the claimed GPS co-ordinates of the gateway - long FLOAT -- Longitude component of the claimed GPS co-ordinates of the gateway + long FLOAT, -- Longitude component of the claimed GPS co-ordinates of the gateway altitude FLOAT -- Claimed alitude of the gateway ); -CREATE TABLE data_rates IF NOT EXISTS ( - id INTEGER PRIMARY KEY, -- Random unique integer, - codename TEXT NOT NULL, -); -- UPDATE 1 --