@ocap/indexdb-elasticsearch
Version:
OCAP indexdb adapter that uses elasticsearch as backend
59 lines (47 loc) • 1.76 kB
JavaScript
const ESIndex = require('./base');
const getParams = require('../model/rollup-validator');
const { getTableName } = require('../util');
const DEFAULT_TIME = '2000-01-01T00:00:00.000Z';
class RollupValidator extends ESIndex {
constructor(db) {
super({
name: getTableName(db.config.prefix, 'rollup_validator'),
docId: 'address',
client: db.client,
http: db.http,
indexParams: getParams(),
});
}
static formatBeforeUpdate(data, tokenLength) {
data.totalStake = super.padBalance(data.totalStake, tokenLength);
data.availableStake = super.padBalance(data.availableStake, tokenLength);
data.totalGain = super.padBalance(data.totalGain, tokenLength);
data.joinTime = data.joinTime || DEFAULT_TIME;
data.leaveTime = data.leaveTime || DEFAULT_TIME;
return data;
}
static formatAfterRead(data) {
if (data) {
data.totalStake = super.trimBalance(data.totalStake);
data.availableStake = super.trimBalance(data.availableStake);
data.totalGain = super.trimBalance(data.totalGain);
data.joinTime = data.joinTime === DEFAULT_TIME ? '' : data.joinTime;
data.leaveTime = data.leaveTime === DEFAULT_TIME ? '' : data.leaveTime;
}
return data;
}
batchInsert(rows) {
const formatted = rows.map((x) => RollupValidator.formatBeforeUpdate(x, this.tokenLength));
return super.batchInsert(formatted);
}
_insert(row) {
return super._insert(RollupValidator.formatBeforeUpdate(row, this.tokenLength));
}
_get(key) {
return super._get(key).then((doc) => RollupValidator.formatAfterRead(doc));
}
_update(key, updates) {
return super._update(key, RollupValidator.formatBeforeUpdate(updates));
}
}
module.exports = RollupValidator;