From 803148d5a23afe207fb5de9ac73c986a324feb9c Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sat, 31 Oct 2015 14:09:39 +0100 Subject: core: o Improved transaction handling. web: o Supporting changing a device's name and description. --- src/DillerTx.js | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/DillerTx.js (limited to 'src/DillerTx.js') diff --git a/src/DillerTx.js b/src/DillerTx.js new file mode 100644 index 0000000..85daee5 --- /dev/null +++ b/src/DillerTx.js @@ -0,0 +1,63 @@ +var di = require('di'); +var _ = require('lodash'); +var DillerConfig = require('./DillerConfig'); +var DillerDao = require('./DillerDao'); +var Diller = require('./Diller'); + +var pgpConstructor = require('pg-promise'); + +var pgp; + +/** + * @param config DillerConfig + * @returns {Function} + * @constructor + */ +function DillerTx(config) { + var log = config.log(); + + function queryLogger(e) { + log.info("Query:", e.query); + if (e.ctx) { + // this query is executing inside a task or transaction, + if (e.ctx.isTX) { + // this query is inside a transaction; + } else { + // this query is inside a task; + } + + } + } + + function connectLogger(client) { + log.info('PGP: connect'); + } + + function disconnectLogger(client) { + 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; + + pgp = pgpConstructor(pgpOptions); + } + + return function (action) { + var con = pgp(config.postgresqlConfig); + + return con.tx(function (pg) { + var dao = new DillerDao(con); + var diller = new Diller(config, con, dao); + return action(pg, dao, diller) + }); + }; +} + +di.annotate(DillerTx, new di.Inject(DillerConfig)); + +module.exports = DillerTx; -- cgit v1.2.3