UNPKG

will-core

Version:
179 lines (178 loc) 7.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataTableHandler = void 0; const will_sql_1 = require("will-sql"); const will_api_1 = require("will-api"); const VerifyError_1 = require("../models/VerifyError"); const SchemeHandler_1 = require("./SchemeHandler"); const TheUtility_1 = require("../utils/TheUtility"); class DataTableHandler extends SchemeHandler_1.SchemeHandler { constructor() { super(...arguments); this.model = { name: "tconfig", alias: { privateAlias: this.section } }; this.handlers = [{ name: "get" }, { name: "category" }, { name: "config" }]; } async doGet(context, model) { let vi = this.validateParameters(context.params, "tablename", "keyfield"); if (!vi.valid) { return Promise.reject(new VerifyError_1.VerifyError("Parameter not found (" + vi.info + ")", will_api_1.HTTP.NOT_ACCEPTABLE, -16061)); } return this.getDataSet(context, model); } async getDataSet(context, model) { let tablename = context.params.tablename; let keyfield = context.params.keyfield; this.logger.info(this.constructor.name + ".getDataSet : tablename=" + tablename + ", keyfield=" + keyfield); let db = this.getPrivateConnector(model); try { let rs = await this.getDataTable(db, [{ tableName: tablename, keyField: keyfield }], true, context); if (rs && rs.length > 0) { return rs[0]; } let data = { tablename: tablename, resultset: this.createRecordSet() }; return await this.createCipherData(context, "get", data); } catch (ex) { this.logger.error(this.constructor.name, ex); return Promise.reject(this.getDBError(ex)); } finally { if (db) db.close(); } } buildDataTableQuery(knsql, datasetting) { let captionFields = datasetting.captionFields || "nameen,nameth"; knsql.clear(); knsql.append("select "); knsql.append(datasetting.keyField); knsql.append(",").append(captionFields); if (datasetting.addonFields) { knsql.append(",").append(datasetting.addonFields); } knsql.append(" from ").append(datasetting.tableName); let filter = " where"; if (datasetting.checkActive) { knsql.append(filter).append(" (inactive is null or inactive != '1') "); filter = " and"; } if (datasetting.addonFilters) { knsql.append(filter).append(" ").append(datasetting.addonFilters); } if (datasetting.orderFields) { knsql.append(" order by ").append(datasetting.orderFields); } else { knsql.append(" order by ").append(captionFields); } } async fetchDataTable(db, setting, disableColumnSchema = true, context) { let knsql = new will_sql_1.KnSQL(); this.buildDataTableQuery(knsql, setting); this.logger.info(this.constructor.name, knsql); let rs = await knsql.executeQuery(db, context); if (disableColumnSchema) { delete rs.columns; } return { tablename: setting.tableName, resultset: rs }; } /** * To get data table as array * @param db connection * @param datasettings * @param disableColumnSchema * @returns */ async getDataTable(db, datasettings, disableColumnSchema = true, context) { let rss = []; for (let dts of datasettings) { rss.push(this.fetchDataTable(db, dts, disableColumnSchema, context)); } return await Promise.all(rss); /* let result = new Array<DataTableResultSet>(); for(let dts of datasettings) { let rs = await this.fetchDataTable(db, dts, disableColumnSchema, context); result.push(rs); } return Promise.resolve(result); */ } async fetchDataCategory(db, setting, disableColumnSchema = true, context) { let knsql = new will_sql_1.KnSQL(); this.buildDataTableQuery(knsql, setting); this.logger.info(this.constructor.name, knsql); let rs = await knsql.executeQuery(db, context); if (disableColumnSchema) { delete rs.columns; } return [{ tablename: setting.tableName, resultset: rs }, setting]; } /** * To get data table as map * @param db connection * @param datasettings * @param disableColumnSchema * @returns */ async getDataCategory(db, datasettings, disableColumnSchema = true, context) { let result = {}; let rss = []; for (let dts of datasettings) { if (dts.setting) { rss.push(this.fetchDataCategory(db, dts, disableColumnSchema, context)); } } let results = await Promise.all(rss); for (let [rs, dts] of results) { result = Object.assign(result, rs); let setting = { tablename: rs.tablename, resultset: rs.resultset, setting: dts.setting }; let map = TheUtility_1.TheUtility.createDataEntity([setting]); result = Object.assign(result, map); } /* for(let dts of datasettings) { if(dts.setting) { let rs = await this.fetchDataTable(db, dts, disableColumnSchema, context); let setting : DataMapRecordSetting = {tablename: rs.tablename, resultset: rs.resultset, setting: dts.setting}; let map = TheUtility.createDataEntity([setting]); result = Object.assign(result, map); } } */ return Promise.resolve(result); } async doList(context, model) { return this.doFind(context, model); } async doFind(context, model) { let rs = await this.doFinding(context, model); return Promise.resolve(this.createRecordSet(rs)); } async category(context) { return this.callFunctional(context, { operate: "category", raw: false }, this.doCategory); } async doCategory(context, model) { let vi = this.validateParameters(context.params, "tablename", "keyfield", "valuefield"); if (!vi.valid) { return Promise.reject(new VerifyError_1.VerifyError("Parameter not found (" + vi.info + ")", will_api_1.HTTP.NOT_ACCEPTABLE, -16061)); } let rs = await this.getDataSet(context, model); let valuefield = context.params.valuefield; let keyfield = context.params.keyfield; let data = TheUtility_1.TheUtility.createDataEntity([{ tablename: rs.tablename, resultset: rs.resultset, setting: { keyName: keyfield, valueNames: [valuefield] } }]); return await this.createCipherData(context, "category", data); } async config(context) { return this.callFunctional(context, { operate: "config", raw: false }, this.doConfig); } async doConfig(context, model) { let vi = this.validateParameters(context.params, "category"); if (!vi.valid) { return Promise.reject(new VerifyError_1.VerifyError("Parameter not found (" + vi.info + ")", will_api_1.HTTP.NOT_ACCEPTABLE, -16061)); } let rs = await this.doFinding(context, model); return await this.createCipherData(context, "config", this.createRecordSet(rs)); } } exports.DataTableHandler = DataTableHandler;