From 5f0b70ca42415558ed1dd513107be195c7ceb3d3 Mon Sep 17 00:00:00 2001 From: Josh Harvey Date: Mon, 24 Apr 2017 18:52:51 +0300 Subject: [PATCH] load latest *good* config --- lib/admin/config.js | 8 ++------ lib/route-helpers.js | 2 +- lib/settings-loader.js | 22 ++++++++++++++++------ migrations/029-add_valid_to_user_config.js | 12 ++++++++++++ 4 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 migrations/029-add_valid_to_user_config.js diff --git a/lib/admin/config.js b/lib/admin/config.js index ca8d7a95..c921a369 100644 --- a/lib/admin/config.js +++ b/lib/admin/config.js @@ -6,6 +6,7 @@ const R = require('ramda') const currencies = require('../../currencies.json') const languageRec = require('../../languages.json') const countries = require('../../countries.json') +const settingsLoader = require('../settings-loader') const db = require('../db') const options = require('../options') @@ -254,11 +255,6 @@ function fetchData () { })) } -function dbSaveConfig (config) { - const sql = 'insert into user_config (type, data) values ($1, $2)' - return db.none(sql, ['config', {config}]) -} - function saveConfigGroup (results) { if (results.values.length === 0) return fetchConfigGroup(results.groupCode) @@ -289,7 +285,7 @@ function saveConfigGroup (results) { if (!R.isNil(newValue.fieldValue)) oldValues.push(newValue) }) - return dbSaveConfig(oldValues) + return settingsLoader.save(oldValues) .then(() => fetchConfigGroup(results.groupCode)) }) } diff --git a/lib/route-helpers.js b/lib/route-helpers.js index 5e7ee8ea..cc6a29d3 100644 --- a/lib/route-helpers.js +++ b/lib/route-helpers.js @@ -106,7 +106,7 @@ function updateMachineDefaults (deviceId) { return settingsLoader.loadLatest() .then(settings => { - return settingsLoader.save({config: settingsLoader.mergeValues(settings.config, newFields)}) + return settingsLoader.save(settingsLoader.mergeValues(settings.config, newFields)) }) } diff --git a/lib/settings-loader.js b/lib/settings-loader.js index b437cbc9..cb962612 100644 --- a/lib/settings-loader.js +++ b/lib/settings-loader.js @@ -82,12 +82,20 @@ function loadLatestConfig () { const sql = `select data from user_config where type=$1 + and valid order by id desc limit 1` - return db.oneOrNone(sql, ['config']) - .then(row => row ? row.data.config : []) + return db.one(sql, ['config']) + .then(row => row.data.config) .then(validate) + .catch(err => { + if (err.name === 'QueryResultError') { + throw new Error('lamassu-server is not configured') + } + + throw err + }) } function checkConstraint (entry, constraint) { @@ -114,9 +122,11 @@ function validateEntry (entry) { return _.every(constraint => validateConstraint(entry, constraint), validations) } +function isValid (config) { + return _.every(validateEntry, config) +} function validate (config) { - const isValid = _.every(validateEntry, config) - if (!isValid) throw new Error('Invalid config') + if (!isValid(config)) throw new Error('Invalid config') return config } @@ -136,8 +146,8 @@ function settings () { } function save (config) { - const sql = 'insert into user_config (type, data) values ($1, $2)' - return db.none(sql, ['config', config]) + const sql = 'insert into user_config (type, data, valid) values ($1, $2, $3)' + return db.none(sql, ['config', {config}, isValid(config)]) } module.exports = { diff --git a/migrations/029-add_valid_to_user_config.js b/migrations/029-add_valid_to_user_config.js new file mode 100644 index 00000000..1d0c5abb --- /dev/null +++ b/migrations/029-add_valid_to_user_config.js @@ -0,0 +1,12 @@ +var db = require('./db') + +exports.up = function (next) { + var sql = [ + 'alter table user_config add column valid boolean not null' + ] + db.multi(sql, next) +} + +exports.down = function (next) { + next() +}