load latest *good* config

This commit is contained in:
Josh Harvey 2017-04-24 18:52:51 +03:00
parent dd7d06f38b
commit 5f0b70ca42
4 changed files with 31 additions and 13 deletions

View file

@ -6,6 +6,7 @@ const R = require('ramda')
const currencies = require('../../currencies.json') const currencies = require('../../currencies.json')
const languageRec = require('../../languages.json') const languageRec = require('../../languages.json')
const countries = require('../../countries.json') const countries = require('../../countries.json')
const settingsLoader = require('../settings-loader')
const db = require('../db') const db = require('../db')
const options = require('../options') 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) { function saveConfigGroup (results) {
if (results.values.length === 0) return fetchConfigGroup(results.groupCode) if (results.values.length === 0) return fetchConfigGroup(results.groupCode)
@ -289,7 +285,7 @@ function saveConfigGroup (results) {
if (!R.isNil(newValue.fieldValue)) oldValues.push(newValue) if (!R.isNil(newValue.fieldValue)) oldValues.push(newValue)
}) })
return dbSaveConfig(oldValues) return settingsLoader.save(oldValues)
.then(() => fetchConfigGroup(results.groupCode)) .then(() => fetchConfigGroup(results.groupCode))
}) })
} }

View file

@ -106,7 +106,7 @@ function updateMachineDefaults (deviceId) {
return settingsLoader.loadLatest() return settingsLoader.loadLatest()
.then(settings => { .then(settings => {
return settingsLoader.save({config: settingsLoader.mergeValues(settings.config, newFields)}) return settingsLoader.save(settingsLoader.mergeValues(settings.config, newFields))
}) })
} }

View file

@ -82,12 +82,20 @@ function loadLatestConfig () {
const sql = `select data const sql = `select data
from user_config from user_config
where type=$1 where type=$1
and valid
order by id desc order by id desc
limit 1` limit 1`
return db.oneOrNone(sql, ['config']) return db.one(sql, ['config'])
.then(row => row ? row.data.config : []) .then(row => row.data.config)
.then(validate) .then(validate)
.catch(err => {
if (err.name === 'QueryResultError') {
throw new Error('lamassu-server is not configured')
}
throw err
})
} }
function checkConstraint (entry, constraint) { function checkConstraint (entry, constraint) {
@ -114,9 +122,11 @@ function validateEntry (entry) {
return _.every(constraint => validateConstraint(entry, constraint), validations) return _.every(constraint => validateConstraint(entry, constraint), validations)
} }
function isValid (config) {
return _.every(validateEntry, config)
}
function validate (config) { function validate (config) {
const isValid = _.every(validateEntry, config) if (!isValid(config)) throw new Error('Invalid config')
if (!isValid) throw new Error('Invalid config')
return config return config
} }
@ -136,8 +146,8 @@ function settings () {
} }
function save (config) { function save (config) {
const sql = 'insert into user_config (type, data) values ($1, $2)' const sql = 'insert into user_config (type, data, valid) values ($1, $2, $3)'
return db.none(sql, ['config', config]) return db.none(sql, ['config', {config}, isValid(config)])
} }
module.exports = { module.exports = {

View file

@ -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()
}