@ocap/indexdb-elasticsearch
Version:
OCAP indexdb adapter that uses elasticsearch as backend
70 lines (58 loc) • 1.9 kB
JavaScript
/* eslint-disable no-underscore-dangle */
const omit = require('lodash/omit');
const ESIndex = require('./base');
const getParams = require('../model/factory');
const { getTableName } = require('../util');
class Factory extends ESIndex {
constructor(db) {
super({
name: getTableName(db.config.prefix, 'factory'),
docId: 'address',
client: db.client,
http: db.http,
indexParams: getParams(),
});
this.tokenLength = db.config.tokenLength;
}
batchInsert(rows) {
return super.batchInsert(rows.map((row) => Factory.formatBeforeUpdate(row, this.tokenLength)));
}
// eslint-disable-next-line require-await
async _insert(row) {
return super._insert(Factory.formatBeforeUpdate(row, this.tokenLength));
}
async _get(key) {
const item = await super._get(key);
return item ? Factory.formatAfterRead(item) : item;
}
static formatBeforeUpdate(x, tokenLength) {
// attach context fields
const row = Object.assign(omit(x, ['context']), { ...(x.context || '') });
// format balance and tokens
row.balance = super.padBalance(row.balance, tokenLength);
row.tokens = row.tokens.map((t) => {
t.value = super.padBalance(t.value, tokenLength);
return t;
});
row.input.value = super.padBalance(row.input.value, tokenLength);
row.input.tokens = row.input.tokens.map((t) => {
t.value = super.padBalance(t.value, tokenLength);
return t;
});
return row;
}
static formatAfterRead(row) {
row.balance = super.trimBalance(row.balance);
row.tokens = row.tokens.map((t) => {
t.value = super.trimBalance(t.value);
return t;
});
row.input.value = super.trimBalance(row.input.value);
row.input.tokens = row.input.tokens.map((t) => {
t.value = super.trimBalance(t.value);
return t;
});
return row;
}
}
module.exports = Factory;