aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2015-11-01 01:06:40 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2015-11-01 01:06:40 +0100
commitf7ff8a837bed336a14aa0442ed8286f3ef78f577 (patch)
treeb6fc65c5fed93383ef5c942a8f5855050fc062b5 /src
parent2173df227821aefe1cf9aee5d8165fa0a24961e9 (diff)
downloaddiller-server-f7ff8a837bed336a14aa0442ed8286f3ef78f577.tar.gz
diller-server-f7ff8a837bed336a14aa0442ed8286f3ef78f577.tar.bz2
diller-server-f7ff8a837bed336a14aa0442ed8286f3ef78f577.tar.xz
diller-server-f7ff8a837bed336a14aa0442ed8286f3ef78f577.zip
core:
o Adding updates of device property's name and description. web: o Ading editing of property name and description.
Diffstat (limited to 'src')
-rw-r--r--src/Diller.js15
-rw-r--r--src/DillerDao.js28
-rw-r--r--src/web/DillerWeb.js33
3 files changed, 66 insertions, 10 deletions
diff --git a/src/Diller.js b/src/Diller.js
index 46dc8e2..dc4c5e7 100644
--- a/src/Diller.js
+++ b/src/Diller.js
@@ -21,13 +21,13 @@ function Diller(config, pg, dao) {
function newName(dao, device, property, timestamp, name) {
log.info('New name for property ', device.key + '/' + property.key + '.name = ' + name);
- return dao.updatePropertyName(property.id, name);
+ return dao.updateProperty(property.id, {name: name});
}
function newDescription(dao, device, property, timestamp, description) {
log.info('New description for property ', device.key + '/' + property.key + '.description = ' + description);
- return dao.updatePropertyDescription(property.id, description);
+ return dao.updateProperty(property.id, {description: description});
}
function updateAggregates(propertyId, timestamp) {
@@ -54,6 +54,14 @@ function Diller(config, pg, dao) {
return dao.updateDevice(deviceId, attributes);
}
+ function updatePropertyAttributes(propertyId, attributes) {
+ var x = _.clone(attributes);
+ x.propertyId = propertyId;
+ log.info('Updating property attributes', x);
+
+ return dao.updateProperty(propertyId, attributes);
+ }
+
//noinspection JSUnusedLocalSymbols
function onMessage(topic, message, payload) {
var timestamp = new Date();
@@ -121,7 +129,8 @@ function Diller(config, pg, dao) {
return {
onMessage: onMessage,
- updateDeviceAttributes: updateDeviceAttributes
+ updateDeviceAttributes: updateDeviceAttributes,
+ updatePropertyAttributes: updatePropertyAttributes
}
}
diff --git a/src/DillerDao.js b/src/DillerDao.js
index e7f6b54..63ad3c1 100644
--- a/src/DillerDao.js
+++ b/src/DillerDao.js
@@ -69,12 +69,27 @@ function DillerDao(tx) {
return tx.one('INSERT INTO device_property(id, device, key, created_timestamp) VALUES(DEFAULT, $1, $2, CURRENT_TIMESTAMP) RETURNING ' + propertyColumns, [deviceId, key]);
}
- function updatePropertyName(id, name) {
- return tx.none('UPDATE device_property SET name=$1 WHERE id=$2', [name, id]);
- }
+ function updateProperty(id, attributes) {
+ var values = [id];
+ var i = 2;
+ var fields = _(attributes).chain()
+ .map(function (value, attribute) {
+ if (attribute == 'name' || attribute == 'description') {
+ value = (value || '').trim();
+ values.push(value.length > 0 ? value : null);
+ return attribute + ' = $' + i++;
+ }
+ })
+ .collect()
+ .join(', ')
+ .value();
+
+ if (fields.length == 0) {
+ return Promise.resolve({});
+ }
- function updatePropertyDescription(id, description) {
- return tx.none('UPDATE device_property SET description=$1 WHERE id=$2', description, id);
+ var sql = 'UPDATE device_property SET ' + fields + ' WHERE id = $1 RETURNING *';
+ return tx.one(sql, values);
}
// -------------------------------------------------------------------------------------------------------------------
@@ -130,8 +145,7 @@ function DillerDao(tx) {
devicePropertyByDeviceIdAndKey: devicePropertyByDeviceIdAndKey,
devicePropertiesByDeviceId: devicePropertiesByDeviceId,
insertDeviceProperty: insertDeviceProperty,
- updatePropertyName: updatePropertyName,
- updatePropertyDescription: updatePropertyDescription,
+ updateProperty: updateProperty,
valuesByPropertyId: valuesByPropertyId,
insertValue: insertValue,
diff --git a/src/web/DillerWeb.js b/src/web/DillerWeb.js
index 3f1d107..03daca7 100644
--- a/src/web/DillerWeb.js
+++ b/src/web/DillerWeb.js
@@ -98,6 +98,37 @@ function DillerWeb(tx, config) {
});
}
+ function patchProperty(req, res) {
+ tx(function (pg, dao, diller) {
+ var propertyId = req.params.propertyId;
+
+ var body = req.body;
+
+ var p;
+ if (!body.attribute) {
+ res.status(400).json({message: 'Required keys: "attribute" and "value".'});
+ } else if (body.attribute == 'name' || body.attribute == 'description') {
+ var attributes = {};
+ attributes[body.attribute] = body.value;
+
+ p = diller.updatePropertyAttributes(propertyId, attributes);
+ } else {
+ p = Promise.reject('Unsupported attribute: ' + body.attribute);
+ }
+
+ return p.then(function (property) {
+ return pg.batch([
+ dao.deviceById(property.device),
+ dao.devicePropertiesByDeviceId(property.device)]
+ );
+ });
+ }).then(function (data) {
+ var device = data[0];
+ device.properties = data[1];
+ res.json({device: device});
+ }, genericErrorHandler(res));
+ }
+
function getIndex(req, res) {
var baseUrl = (req.headers['trygvis-prefix'] || '').replace(/\/$/, '');
res.render('index', {baseUrl: baseUrl + '/'});
@@ -143,7 +174,9 @@ function DillerWeb(tx, config) {
addApi('getDevices', 'get', '/device', getDevices);
addApi('getDevice', 'get', '/device/:deviceId', getDevice);
addApi('patchDevice', 'patch', '/device/:deviceId', patchDevice);
+
addApi('getValues', 'get', '/property/:propertyId/values', getValues);
+ addApi('patchProperty', 'patch', '/property/:propertyId/values', patchProperty);
var templates = express.Router();