Merge pull request #365 from pnagurny/enhance/history-pagination
address history pagination
This commit is contained in:
commit
83c8f9c5ac
@ -48,12 +48,12 @@ AddressController.prototype.addressHistorySubQuery = function(req, res, param) {
|
|||||||
AddressController.prototype.getAddressHistory = function(address, callback) {
|
AddressController.prototype.getAddressHistory = function(address, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.node.getAddressHistory(address, true, function(err, txinfos) {
|
this.node.getAddressHistory(address, {}, function(err, result) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(null, self.transformAddressHistory(txinfos, address));
|
callback(null, self.transformAddressHistory(result.items, address));
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -184,12 +184,23 @@ AddressController.prototype.transformUtxo = function(utxo) {
|
|||||||
AddressController.prototype.multitxs = function(req, res, next) {
|
AddressController.prototype.multitxs = function(req, res, next) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.node.getAddressHistory(req.addrs, true, function(err, txinfos) {
|
var options = {
|
||||||
|
from: req.query.from || req.body.from || 0
|
||||||
|
};
|
||||||
|
|
||||||
|
options.to = req.query.to || req.body.to || options.from + 10;
|
||||||
|
|
||||||
|
self.node.getAddressHistory(req.addrs, options, function(err, result) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return common.handleErrors(err, res);
|
return common.handleErrors(err, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
res.jsonp(self.transformAddressHistoryForMultiTxs(txinfos));
|
res.jsonp({
|
||||||
|
totalItems: result.totalCount,
|
||||||
|
from: options.from,
|
||||||
|
to: Math.min(options.to, result.totalCount),
|
||||||
|
items: self.transformAddressHistoryForMultiTxs(result.items)
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -202,16 +213,9 @@ AddressController.prototype.transformAddressHistoryForMultiTxs = function(txinfo
|
|||||||
return self.indexOf(value) === index;
|
return self.indexOf(value) === index;
|
||||||
}).map(function(tx) {
|
}).map(function(tx) {
|
||||||
return self.txController.transformTransaction(tx);
|
return self.txController.transformTransaction(tx);
|
||||||
}).reverse();
|
});
|
||||||
|
|
||||||
var transformed = {
|
return items;
|
||||||
totalItems: items.length,
|
|
||||||
from: 0,
|
|
||||||
to: items.length,
|
|
||||||
items: items
|
|
||||||
};
|
|
||||||
|
|
||||||
return transformed;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -190,7 +190,7 @@ TxController.prototype.list = function(req, res) {
|
|||||||
|
|
||||||
var blockHash = req.query.block;
|
var blockHash = req.query.block;
|
||||||
var address = req.query.address;
|
var address = req.query.address;
|
||||||
var page = req.query.pageNum;
|
var page = parseInt(req.query.pageNum) || 0;
|
||||||
var pageLength = 10;
|
var pageLength = 10;
|
||||||
var pagesTotal = 1;
|
var pagesTotal = 1;
|
||||||
|
|
||||||
@ -235,28 +235,27 @@ TxController.prototype.list = function(req, res) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else if(address) {
|
} else if(address) {
|
||||||
self.node.getAddressHistory(address, true, function(err, txinfos) {
|
var options = {
|
||||||
|
from: page * pageLength,
|
||||||
|
to: (page + 1) * pageLength
|
||||||
|
};
|
||||||
|
|
||||||
|
self.node.getAddressHistory(address, options, function(err, result) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return common.handleErrors(err, res);
|
return common.handleErrors(err, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
var txs = txinfos.map(function(info) {
|
var txs = result.items.map(function(info) {
|
||||||
return info.tx;
|
return info.tx;
|
||||||
}).filter(function(value, index, self) {
|
}).filter(function(value, index, self) {
|
||||||
return self.indexOf(value) === index;
|
return self.indexOf(value) === index;
|
||||||
});
|
});
|
||||||
|
|
||||||
var totalTxs = txs.length;
|
|
||||||
|
|
||||||
if(page) {
|
|
||||||
txs = txs.splice(page * pageLength, pageLength);
|
|
||||||
pagesTotal = Math.ceil(totalTxs / pageLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
var transformed = txs.map(self.transformTransaction.bind(self));
|
var transformed = txs.map(self.transformTransaction.bind(self));
|
||||||
|
|
||||||
res.jsonp({
|
res.jsonp({
|
||||||
pagesTotal: pagesTotal,
|
pagesTotal: Math.ceil(result.totalCount / pageLength),
|
||||||
txs: transformed
|
txs: transformed
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -5,7 +5,9 @@ var AddressController = require('../lib/addresses');
|
|||||||
var _ = require('lodash');
|
var _ = require('lodash');
|
||||||
var bitcore = require('bitcore');
|
var bitcore = require('bitcore');
|
||||||
|
|
||||||
var txinfos = [
|
var txinfos = {
|
||||||
|
totalCount: 2,
|
||||||
|
items: [
|
||||||
{
|
{
|
||||||
"address": "mkPvAKZ2rar6qeG3KjBtJHHMSP1wFZH7Er",
|
"address": "mkPvAKZ2rar6qeG3KjBtJHHMSP1wFZH7Er",
|
||||||
"satoshis": 2782729129,
|
"satoshis": 2782729129,
|
||||||
@ -86,7 +88,8 @@ var txinfos = [
|
|||||||
"nLockTime": 534099
|
"nLockTime": 534099
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
];
|
]
|
||||||
|
};
|
||||||
|
|
||||||
var tx = bitcore.Transaction().fromObject({
|
var tx = bitcore.Transaction().fromObject({
|
||||||
"hash": "63b68becb0e514b32317f4b29a5cf0627d4087e54ac17f686fcb1d9a27680f73",
|
"hash": "63b68becb0e514b32317f4b29a5cf0627d4087e54ac17f686fcb1d9a27680f73",
|
||||||
@ -135,14 +138,14 @@ var tx = bitcore.Transaction().fromObject({
|
|||||||
tx.__height = 534181;
|
tx.__height = 534181;
|
||||||
tx.__timestamp = 1441116143;
|
tx.__timestamp = 1441116143;
|
||||||
tx.__blockHash = '0000000000000041ddc94ecf4f86a456a83b2e320c36c6f0c13ff92c7e75f013';
|
tx.__blockHash = '0000000000000041ddc94ecf4f86a456a83b2e320c36c6f0c13ff92c7e75f013';
|
||||||
var txinfos2 = [
|
var txinfos2 = {
|
||||||
{
|
totalCount: 1,
|
||||||
tx: tx
|
items: [
|
||||||
},
|
|
||||||
{
|
{
|
||||||
tx: tx
|
tx: tx
|
||||||
}
|
}
|
||||||
];
|
]
|
||||||
|
};
|
||||||
|
|
||||||
var utxos = [
|
var utxos = [
|
||||||
{
|
{
|
||||||
@ -512,7 +515,9 @@ describe('Addresses', function() {
|
|||||||
var addresses = new AddressController(node);
|
var addresses = new AddressController(node);
|
||||||
|
|
||||||
var req = {
|
var req = {
|
||||||
addrs: 'mzkD4nmQ8ixqxySdBgsXTpgvAMK5iRZpNK,moZY18rGNmh4YCPeugtGW46AkkWMQttBUD'
|
addrs: 'mzkD4nmQ8ixqxySdBgsXTpgvAMK5iRZpNK,moZY18rGNmh4YCPeugtGW46AkkWMQttBUD',
|
||||||
|
query: {},
|
||||||
|
body: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
var res = {
|
var res = {
|
||||||
|
|||||||
@ -613,6 +613,11 @@ describe('Transactions', function() {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
var historyResult = {
|
||||||
|
totalCount: txinfos.length,
|
||||||
|
items: txinfos
|
||||||
|
};
|
||||||
|
|
||||||
txinfos[0].tx.__blockHash = '00000000000001001aba15de213648f370607fb048288dd27b96f7e833a73520';
|
txinfos[0].tx.__blockHash = '00000000000001001aba15de213648f370607fb048288dd27b96f7e833a73520';
|
||||||
txinfos[0].tx.__timestamp = 1441068774;
|
txinfos[0].tx.__timestamp = 1441068774;
|
||||||
txinfos[0].tx.__height = 534105;
|
txinfos[0].tx.__height = 534105;
|
||||||
@ -622,7 +627,7 @@ describe('Transactions', function() {
|
|||||||
txinfos[1].tx.__height = 534110;
|
txinfos[1].tx.__height = 534110;
|
||||||
|
|
||||||
var node = {
|
var node = {
|
||||||
getAddressHistory: sinon.stub().callsArgWith(2, null, txinfos),
|
getAddressHistory: sinon.stub().callsArgWith(2, null, historyResult),
|
||||||
services: {
|
services: {
|
||||||
db: {
|
db: {
|
||||||
tip: {
|
tip: {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user