@tasolutions/express-core
Version:
All libs for express
89 lines (85 loc) • 3.33 kB
JavaScript
const { apiGWInfo } = require("../../../config");
const _ = require('lodash');
const { coverRequiredFields } = require("./cover");
module.exports = {
genApiConfig(moduleName, path, type, actions, fieldList, extraConfig = {}) {
const basePath = `${apiGWInfo.prefix}${path}`;
const baseUrl = `${apiGWInfo.url}${path}`;
let pathExtension = '';
fieldList = fieldList.filter(field => {
return field.apply_actions.length === 0 || field.apply_actions.includes(type);
});
let requestFields = [];
let requiredFields = [];
switch (type) {
case 'CREATE':
requestFields = fieldList;
requiredFields = fieldList.filter(field => field.is_required).map(field => field.key);
break;
case 'UPDATE':
requestFields = fieldList;
requiredFields = fieldList.filter(field => field.is_required).map(field => field.key);
pathExtension = '/:_id';
break;
case 'LIST':
requestFields = fieldList.filter(field => field.is_filter);
requiredFields = requestFields.map(field => field.key);
break;
case 'DETAIL':
pathExtension = '/:_id';
break;
case 'DELETE':
pathExtension = '/:_id';
break;
case 'EXPORT':
pathExtension = '/export';
requestFields = fieldList.filter(field => field.is_filter);
requiredFields = requestFields.map(field => field.key);
break;
case 'COUNT':
pathExtension = '/count';
requestFields = fieldList.filter(field => field.is_filter);
requiredFields = requestFields.map(field => field.key);
break;
default:
pathExtension = '';
}
return {
api: {
path: `${basePath}${pathExtension}`,
url: `${baseUrl}${pathExtension}`,
method: actions[type].method,
type: moduleName,
content_type: 'application/json',
request_fields: requestFields.length ? requestFields : null,
required_fields: requiredFields.length ? coverRequiredFields(requiredFields) : null,
},
response_fields: type === 'COUNT' ? [
{
key: 'count',
type: 'NUMBER',
type_sub: 'NUMBER',
show: true,
is_required: false,
label: 'Count',
select_options: null,
db_type: 'Number',
max_length: null
},
{
key: 'total',
type: 'NUMBER',
type_sub: 'NUMBER',
show: true,
is_required: false,
label: 'Total',
select_options: null,
db_type: 'Number',
max_length: null
}
] : fieldList,
actions: [],
...extraConfig
};
}
}