'use strict';

/**
 * 指标模板 -- 指标节点业务类
 *
 * @author Mai
 * @date 2018/4/19
 * @version
 */

module.exports = app => {
    class TemplateIndex extends app.BaseService {
        /**
         * 构造函数
         *
         * @param {Object} ctx - egg全局context
         * @return {void}
         */
        constructor(ctx) {
            super(ctx);
            this.tableName = 'template_index';
        }

        /**
         * 导入指标数据
         *
         * @param {Array|Object} datas
         * @param transaction - 事务
         * @returns {Promise<void>}
         */
        async importData(data, transaction, templateId = 1) {
            const datas = data instanceof Array ? data : [data];
            await transaction.delete(this.tableName, {template_id: templateId});
            const insertResult = await transaction.insert(this.tableName, datas);
            if (insertResult.affectedRows !== datas.length) {
                throw '导入指标错误';
            }
        }

        /**
         * 设置计算规则
         * 应同步设置rule, calc_rule, parse_rule
         *
         * @param data
         * @returns {Promise<*>}
         */
        async setRule(data) {
            const result = await this.db.update(this.tableName, data);
            return result;
        }
    }

    return TemplateIndex;
};