From 85474565b0a0d92a09fecb14e8bc0afaad7fbc64 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 1 Nov 2015 15:28:40 +0100 Subject: misc: o Playing around with type annotations. --- src/Diller.js | 13 ++++++- src/DillerConfig.js | 6 ++++ src/DillerDao.js | 21 +++++++++-- src/DillerTx.js | 29 +++++++-------- src/mqtt/DillerMqtt.js | 6 ++-- src/types.js | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/web/DillerWeb.js | 49 +++++++++++++++++++++----- 7 files changed, 188 insertions(+), 31 deletions(-) create mode 100644 src/types.js diff --git a/src/Diller.js b/src/Diller.js index dc4c5e7..e2dd47d 100644 --- a/src/Diller.js +++ b/src/Diller.js @@ -1,5 +1,11 @@ var _ = require('lodash'); +/** + * @param {DillerConfig} config + * @param {PgTx} pg + * @param {DillerDao} dao + * @constructor + */ function Diller(config, pg, dao) { var log = config.log(); @@ -46,6 +52,10 @@ function Diller(config, pg, dao) { }); } + /** + * @param deviceId int + * @param attributes object + */ function updateDeviceAttributes(deviceId, attributes) { var x = _.clone(attributes); x.deviceId = deviceId; @@ -127,11 +137,12 @@ function Diller(config, pg, dao) { }); } + /** @lends Diller.prototype */ return { onMessage: onMessage, updateDeviceAttributes: updateDeviceAttributes, updatePropertyAttributes: updatePropertyAttributes - } + }; } module.exports = Diller; diff --git a/src/DillerConfig.js b/src/DillerConfig.js index 440aadb..f7755a0 100644 --- a/src/DillerConfig.js +++ b/src/DillerConfig.js @@ -52,9 +52,15 @@ function configureLogging(app) { log = bunyan.createLogger(cfg); } +/** + * @constructor + */ function DillerConfig() { var httpPort = process.env.HTTP_PORT || 8080; + /** + * @lends DillerConfig.prototype + */ return { isProd: isProd, updateDillerRpc: !isProd(), diff --git a/src/DillerDao.js b/src/DillerDao.js index 63ad3c1..d81b418 100644 --- a/src/DillerDao.js +++ b/src/DillerDao.js @@ -1,15 +1,21 @@ var _ = require('lodash'); +/** + * @param tx {PgTx} + * @class + */ function DillerDao(tx) { var deviceColumns = 'id, created_timestamp, key, name, description'; var propertyColumns = 'id, created_timestamp, device, key, name, description, last_value, last_timestamp'; - var valueColumns = 'property, timestamp, value_text, value_numeric'; // ------------------------------------------------------------------------------------------------------------------- // Device // ------------------------------------------------------------------------------------------------------------------- + /** + * @returns {Promise} + */ function devices() { return tx.manyOrNone("SELECT " + deviceColumns + " FROM device"); } @@ -122,6 +128,9 @@ function DillerDao(tx) { }); } + /** + * @returns {Promise} + */ function updateMinuteAggregatesForProperty(propertyId, timestamp) { return tx.none('DELETE FROM value_by_minute WHERE property=$1 AND timestamp=DATE_TRUNC(\'minute\', $2::TIMESTAMPTZ)', [propertyId, timestamp]) .then(function () { @@ -134,6 +143,7 @@ function DillerDao(tx) { }); } + /** @lends DillerDao.prototype */ return { devices: devices, deviceById: deviceById, @@ -151,7 +161,14 @@ function DillerDao(tx) { insertValue: insertValue, updateHourAggregatesForProperty: updateHourAggregatesForProperty, updateMinuteAggregatesForProperty: updateMinuteAggregatesForProperty - } + }; } +/** + * @type DillerDao + */ +var x; + +x.deviceById(123) + module.exports = DillerDao; diff --git a/src/DillerTx.js b/src/DillerTx.js index 85daee5..0f6b2ea 100644 --- a/src/DillerTx.js +++ b/src/DillerTx.js @@ -1,19 +1,14 @@ var di = require('di'); var _ = require('lodash'); -var DillerConfig = require('./DillerConfig'); -var DillerDao = require('./DillerDao'); -var Diller = require('./Diller'); +var _DillerDao = require('./DillerDao'); +var _Diller = require('./Diller'); +var _DillerConfig = require('./DillerConfig'); var pgpConstructor = require('pg-promise'); var pgp; -/** - * @param config DillerConfig - * @returns {Function} - * @constructor - */ -function DillerTx(config) { +function _DillerTx(config) { var log = config.log(); function queryLogger(e) { @@ -30,19 +25,19 @@ function DillerTx(config) { } function connectLogger(client) { - log.info('PGP: connect'); + //log.info('PGP: connect'); } function disconnectLogger(client) { - log.info('PGP: disconnect'); + //log.info('PGP: disconnect'); } if (!pgp) { var pgpOptions = {}; pgpOptions.query = (config.logQueries && queryLogger) || undefined; - //pgpOptions.connect = (config.logQueries && connectLogger) || undefined; - //pgpOptions.disconnect = (config.logQueries && disconnectLogger) || undefined; + pgpOptions.connect = (config.logQueries && connectLogger) || undefined; + pgpOptions.disconnect = (config.logQueries && disconnectLogger) || undefined; pgp = pgpConstructor(pgpOptions); } @@ -51,13 +46,13 @@ function DillerTx(config) { var con = pgp(config.postgresqlConfig); return con.tx(function (pg) { - var dao = new DillerDao(con); - var diller = new Diller(config, con, dao); + var dao = new _DillerDao(con); + var diller = new _Diller(config, con, dao); return action(pg, dao, diller) }); }; } -di.annotate(DillerTx, new di.Inject(DillerConfig)); +di.annotate(_DillerTx, new di.Inject(_DillerConfig)); -module.exports = DillerTx; +module.exports = _DillerTx; diff --git a/src/mqtt/DillerMqtt.js b/src/mqtt/DillerMqtt.js index e991b40..0bd8ed9 100644 --- a/src/mqtt/DillerMqtt.js +++ b/src/mqtt/DillerMqtt.js @@ -32,9 +32,9 @@ function DillerMqtt(config, tx) { run: run }; } -var DillerTx = require('../DillerTx'); -var DillerConfig = require('../DillerConfig'); +var _DillerTx = require('../DillerTx'); +var _DillerConfig = require('../DillerConfig'); -di.annotate(DillerMqtt, new di.Inject(DillerConfig, DillerTx)); +di.annotate(DillerMqtt, new di.Inject(_DillerConfig, _DillerTx)); module.exports = DillerMqtt; diff --git a/src/types.js b/src/types.js new file mode 100644 index 0000000..8c6300c --- /dev/null +++ b/src/types.js @@ -0,0 +1,95 @@ +var Promise = {}; + +Promise.resolve = function (value) { +}; + +Promise.reject = function (reason) { +}; + +/** + * @param {Function} resolved + * @param {Function=} rejected + * @return {Promise} + */ +Promise.prototype.then = function (resolved, rejected) { +}; + +var _ = function (value) { +}; + +/** + * @returns {_} + */ +_.chain = function () { +}; + +var PgTx = function () { + /** @lends {PgTx.prototype} */ + return { + /** + * @param {Promise[]} promises + * @return {Promise} + */ + batch: function (promises) { + }, + /** + * @param {String} sql + * @param {Array=} values + * @return {Promise} + */ + many: function (sql, values) { + }, + /** + * @param {String} sql + * @param {Array=} values + * @return {Promise} + */ + manyOrNone: function (sql, values) { + }, + /** + * @param {String} sql + * @param {Array=} values + * @return {Promise} + */ + one: function (sql, values) { + }, + /** + * @param {String} sql + * @param {Array=} values + * @return {Promise} + */ + oneOrNone: function (sql, values) { + }, + /** + * @param {String} sql + * @param {Array=} values + * @return {Promise} + */ + none: function (sql, values) { + } + }; +}; + +var HttpReq = {}; +HttpReq.prototype.body = {}; +HttpReq.prototype.headers = {}; +HttpReq.prototype.params = {}; + +var HttpRes = {}; +/** + * @returns {HttpRes} + */ +HttpRes.prototype.status = function (status) { +}; +/** + * @returns {HttpRes} + */ +HttpRes.prototype.json = function (object) { +}; +/** + * @param {string} view + * @param {object} params + * @returns {HttpRes} + */ +HttpRes.prototype.render = function (view, params) { +}; diff --git a/src/web/DillerWeb.js b/src/web/DillerWeb.js index 03daca7..42aa7bf 100644 --- a/src/web/DillerWeb.js +++ b/src/web/DillerWeb.js @@ -3,13 +3,12 @@ var bodyParser = require('body-parser'); var _ = require('lodash'); var di = require('di'); -var DillerConfig = require('../DillerConfig'); -var DillerTx = require('../DillerTx'); +var _DillerConfig = require('../DillerConfig'); +var _DillerTx = require('../DillerTx'); /** - * @param tx DillerTx - * @param config DillerConfig - * @returns {{init: init, listen: listen, generateRpc: generateRpc}} + * @param {function(function(PgTx, DillerDao, Diller))} tx + * @param {DillerConfig} config * @constructor */ function DillerWeb(tx, config) { @@ -18,14 +17,17 @@ function DillerWeb(tx, config) { var calls = []; var app; + /** + * @param {HttpRes} res + */ function genericErrorHandler(res) { return function (data) { if (typeof data === 'string') { - data = {message: data} + data = {message: data}; } log.warn('fail', data); return res.status(500).json(data); - } + }; } function deviceResponse(data) { @@ -34,6 +36,10 @@ function DillerWeb(tx, config) { return {device: device}; } + /** + * @param {HttpReq} req + * @param {HttpRes} res + */ function getDevices(req, res) { tx(function (pg, dao) { return dao.devices(); @@ -42,6 +48,10 @@ function DillerWeb(tx, config) { }, genericErrorHandler(res)); } + /** + * @param {HttpReq} req + * @param {HttpRes} res + */ function getDevice(req, res) { tx(function (pg, dao) { var deviceId = req.params.deviceId; @@ -55,6 +65,10 @@ function DillerWeb(tx, config) { }, genericErrorHandler(res)); } + /** + * @param {HttpReq} req + * @param {HttpRes} res + */ function patchDevice(req, res) { tx(function (pg, dao, diller) { var deviceId = req.params.deviceId; @@ -86,6 +100,10 @@ function DillerWeb(tx, config) { }, genericErrorHandler(res)); } + /** + * @param {HttpReq} req + * @param {HttpRes} res + */ function getValues(req, res) { tx(function (tx, dao) { var propertyId = req.params.propertyId; @@ -98,6 +116,10 @@ function DillerWeb(tx, config) { }); } + /** + * @param {HttpReq} req + * @param {HttpRes} res + */ function patchProperty(req, res) { tx(function (pg, dao, diller) { var propertyId = req.params.propertyId; @@ -129,6 +151,10 @@ function DillerWeb(tx, config) { }, genericErrorHandler(res)); } + /** + * @param {HttpReq} req + * @param {HttpRes} res + */ function getIndex(req, res) { var baseUrl = (req.headers['trygvis-prefix'] || '').replace(/\/$/, ''); res.render('index', {baseUrl: baseUrl + '/'}); @@ -142,6 +168,12 @@ function DillerWeb(tx, config) { var api = express.Router(); + /** + * @param name + * @param method + * @param path + * @param {function(HttpReq, HttpRes)} callback + */ function addApi(name, method, path, callback) { api[method](path, callback); var layer = _.last(api.stack); @@ -192,6 +224,7 @@ function DillerWeb(tx, config) { } function listen() { + log.info('Starting HTTP listener on ' + config.httpPort); app.listen(config.httpPort); } @@ -260,6 +293,6 @@ function DillerWeb(tx, config) { } } -di.annotate(DillerWeb, new di.Inject(DillerTx, DillerConfig)); +di.annotate(DillerWeb, new di.Inject(_DillerTx, _DillerConfig)); module.exports = DillerWeb; -- cgit v1.2.3