will-core
Version:
core module
179 lines (178 loc) • 7.69 kB
JavaScript
"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;