aboutsummaryrefslogtreecommitdiffstats
path: root/routes
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2016-10-14 20:48:01 -0700
committerAdam Soltys <[email protected]>2016-10-14 20:48:01 -0700
commit6f906c289422c9d655e194390bb871b2e276f326 (patch)
tree0973e01f99a1ac187d1431804b3768774ef1a02e /routes
parent60b9265ca0ea5f880dea5c6d2cdef177e9d8dc86 (diff)
downloadcoinos-server-6f906c289422c9d655e194390bb871b2e276f326.tar.gz
coinos-server-6f906c289422c9d655e194390bb871b2e276f326.zip
Reimplement transactions index function with promises
Diffstat (limited to 'routes')
-rw-r--r--routes/transactions.js66
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();
});