diff options
| author | Adam Soltys <[email protected]> | 2016-10-14 20:48:01 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2016-10-14 20:48:01 -0700 |
| commit | 6f906c289422c9d655e194390bb871b2e276f326 (patch) | |
| tree | 0973e01f99a1ac187d1431804b3768774ef1a02e /routes | |
| parent | 60b9265ca0ea5f880dea5c6d2cdef177e9d8dc86 (diff) | |
| download | coinos-server-6f906c289422c9d655e194390bb871b2e276f326.tar.gz coinos-server-6f906c289422c9d655e194390bb871b2e276f326.zip | |
Reimplement transactions index function with promises
Diffstat (limited to 'routes')
| -rw-r--r-- | routes/transactions.js | 66 |
1 files changed, 36 insertions, 30 deletions
diff --git a/routes/transactions.js b/routes/transactions.js index ea7d3771..63e416e6 100644 --- a/routes/transactions.js +++ b/routes/transactions.js @@ -1,5 +1,7 @@ (function() { - var config, db, moment; + var Promise, config, db, moment, txid; + + Promise = require('bluebird'); db = require('../redis'); @@ -7,6 +9,13 @@ moment = require('moment'); + txid = function(transaction, user) { + if (transaction.match(/[a-z]/i)) { + return transaction; + } + return user + ":transactions:" + transaction; + }; + module.exports = { index: function(req, res) { return res.render('transactions/index', { @@ -23,36 +32,33 @@ }); }, json: function(req, res) { - var r, user; - user = req.params.user; - r = { + var pattern, promises, result, x; + result = { 'transactions': [] }; - return db.lrange("" + user + ":transactions", 0, -1, function(err, transactions) { - var cb, i, txid; - if (err || !transactions.length) { - res.write(JSON.stringify(r)); - return res.end(); - } - txid = function() { - var x; - x = transactions[i++]; - if (x.match(/[a-z]/i)) { - return x; - } - return user + ":transactions:" + x; - }; - cb = function(err, t) { - r.transactions.push(t); - if (i >= transactions.length) { - res.write(JSON.stringify(r)); - return res.end(); - } else { - return db.hgetall(txid(), cb); - } - }; - i = 0; - return db.hgetall(txid(), cb); + promises = []; + pattern = req.params.user; + if (req.session.user.username === 'admin') { + x = '*'; + } + return db.keysAsync(pattern + ":transactions").then(function(keys) { + return Promise.all(keys.map(function(key) { + var user; + user = key.substr(0, key.indexOf(':')); + return db.lrangeAsync(key, 0, -1).then(function(transactions) { + return Promise.all(transactions.map(function(transaction) { + return db.hgetallAsync(txid(transaction, user)).then(function(transaction) { + if (transaction) { + transaction.user = user; + return result.transactions.push(transaction); + } + }); + })); + }); + })); + }).then(function() { + res.write(JSON.stringify(result)); + return res.end(); }); }, create: function(req, res) { @@ -102,7 +108,7 @@ } multi = db.multi(); multi.hmset(req.body.txid, req.body); - multi.rpush("" + req.params.user + ":transactions", req.body.txid); + multi.rpush(req.params.user + ":transactions", req.body.txid); return multi.exec(function(err, replies) { return finish(); }); |
