UNPKG

@ocap/indexdb-elasticsearch

Version:
70 lines (58 loc) 1.9 kB
/* 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;