Added GetTransactions

This commit is contained in:
Chris Kleeschulte 2017-01-13 13:44:38 -05:00
parent 789c18a6df
commit 57b3f5d67f
2 changed files with 69 additions and 1 deletions

View File

@ -1,5 +1,6 @@
'use strict';
var async = require('async');
var BaseService = require('../../service');
var inherits = require('util').inherits;
var index = require('../../');
@ -133,6 +134,29 @@ WalletService.prototype._endpointPostAddresses = function() {
};
};
WalletService.prototype._endpointGetTransactions = function() {
var self = this;
return function(req, res) {
req.setTimeout(600000);
var walletId = req.params.walletId;
var options = {
start: req.query.start,
end : req.query.end,
from: req.query.from,
to: req.query.to
};
self._getTransactions(walletId, options, function(err, transactions, totalCount) {
if(err) {
return utils.sendError(err, res);
}
res.status(200).jsonp({
transactions: transactions,
totalCount: totalCount
});
});
};
};
WalletService.prototype._endpointPutAddresses = function() {
var self = this;
return function(req, res) {
@ -205,6 +229,45 @@ WalletService.prototype._getBalance = function(walletId, height, options, callba
});
};
WalletService.prototype._chunkAdresses = function(addresses) {
var maxLength = this.node.services.bitcoind.maxAddressesQuery;
var groups = [];
var groupsCount = Math.ceil(addresses.length / maxLength);
for(var i = 0; i < groupsCount; i++) {
groups.push(addresses.slice(i * maxLength, Math.min(maxLength * (i + 1), addresses.length)));
}
return groups;
};
WalletService.prototype._getTransactions = function(walletId, options, callback) {
var self = this;
self._getAddresses(walletId, function(err, addresses) {
if(err) {
return callback(err);
}
if (!addresses) {
return callback(new Error('wallet not found'));
}
var addressGroups = self._chunkAdresses(addresses);
var transactions = [];
async.eachSeries(addressGroups, function(addresses, next) {
self.node.services.bitcoind.getAddressHistory(addresses, options, function(err, history) {
if(err) {
return callback(err);
}
var groupTransactions = history.items.map(function(item) {
return item.tx;
});
transactions = _.union(transactions, groupTransactions);
next();
});
}, function(err) {
callback(null, transactions, transactions.length);
});
});
};
WalletService.prototype._getAddresses = function(walletId, callback) {
this._db.get(walletId, callback);
};
@ -239,6 +302,9 @@ WalletService.prototype.setupRoutes = function(app, express) {
app.put('/wallets/:walletId/addresses',
s._endpointPutAddresses()
);
app.get('/wallets/:walletId/transactions',
s._endpointGetTransactions()
);
app.post('/wallets',
upload.single('addresses'),
v.checkAddresses,

View File

@ -147,7 +147,9 @@ exports.checkWalletId = function(req, res, next) {
};
exports.checkAddresses = function(req, res, next) {
if(req.body) {
if (!req.file && req.body) {
req.addresses = req.body;
return next();
}