aboutsummaryrefslogtreecommitdiff
path: root/src/DillerTx.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/DillerTx.js')
-rw-r--r--src/DillerTx.js63
1 files changed, 63 insertions, 0 deletions
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;