UNPKG

@tasolutions/express-core

Version:
89 lines (85 loc) 3.33 kB
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 }; } }