From a1cc2bcfda4d6642f6ce7e7b3fc2012f91a81d73 Mon Sep 17 00:00:00 2001 From: Vu Pham Date: Thu, 2 May 2019 11:07:42 +0700 Subject: [PATCH] add capcity history, vote percentage --- apis/candidates.js | 28 ++++++++++++++++++++++++++-- crawl.js | 2 ++ models/mongodb/rank.js | 2 ++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/apis/candidates.js b/apis/candidates.js index bc794d1e..2476c91d 100644 --- a/apis/candidates.js +++ b/apis/candidates.js @@ -13,6 +13,7 @@ const logger = require('../helpers/logger') const { check, validationResult, query } = require('express-validator/check') const uuidv4 = require('uuid/v4') const urljoin = require('url-join') +const BigNumber = require('bignumber.js') const gas = config.get('blockchain.gas') @@ -126,12 +127,35 @@ router.get('/masternodes', [ status: { $nin: ['RESIGNED', 'PROPOSED'] } }).sort(sort).limit(limit).skip(skip).lean().exec() + const votedAmount = await db.Candidate.aggregate([ + { + $match: { + status: { $ne: 'RESIGNED' } + } + }, + { + $group: { + _id: null, sum: { $sum: '$capacityNumber' } + } + } + ]) + + let map = candidates.map(async c => { + if (votedAmount) { + c.votePercentage = new BigNumber(c.capacityNumber) + .multipliedBy(100).div(votedAmount[0].sum).toString(10) + } + return c + }) + let ret = await Promise.all(map) + return res.json({ - items: candidates, + items: ret, activeCandidates: await activeCandidates || 0, totalSlashed: await totalSlashed, totalResigned: await totalResigned, - totalProposed: await totalProposed + totalProposed: await totalProposed, + votedAmount }) } catch (e) { return next(e) diff --git a/crawl.js b/crawl.js index 3d4c892c..28426bcc 100644 --- a/crawl.js +++ b/crawl.js @@ -378,6 +378,8 @@ async function watchNewBlock (n) { db.Rank.updateOne({ candidate: c.candidate, epoch: latestEpoch }, { epoch: latestEpoch, candidate: c.candidate, + capacity: c.capacity, + capacityNumber: c.capacityNumber, rank: i + 1, epochCreatedAt: moment.unix(block.timestamp).utc() }, { upsert: true }).then(() => { return true }) diff --git a/models/mongodb/rank.js b/models/mongodb/rank.js index ce4244f3..e78113de 100644 --- a/models/mongodb/rank.js +++ b/models/mongodb/rank.js @@ -6,6 +6,8 @@ var Schema = mongoose.Schema var Rank = new Schema({ candidate: Number, rank: Number, + capacity: String, + capacityNumber: Number, epoch: Number, epochCreatedAt: Date }, { timestamps: true })