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;