@tasolutions/express-core
Version:
All libs for express
47 lines (42 loc) • 1.99 kB
JavaScript
const _ = require('lodash');
const Response = require('../../utils/v1Response');
const actionList = require('../../utils/actionList');
const { buildFieldListFromInterface } = require('./common/fieldBuilderInterface');
const path = require('path');
const { buildResultFromInterface } = require('./common/resultBuilderInterface');
const interfacesPath = path.resolve(process.cwd(), 'src/interfaces');
let interfacesMapping;
try {
interfacesMapping = require(interfacesPath);
} catch (error) {
console.error('[CORE][CRUD][GET_ALL_SCHEMA] Could not load `interfaces`');
interfacesMapping = {};
}
module.exports = {
getSchemaInterface: async (req, res, Collection, reqPath) => {
try {
const moduleName = Collection.collection.collectionName;
const normalizedModuleName = _.snakeCase(moduleName).replace(/_/g, '-');
const regex = new RegExp(`(${_.escapeRegExp(moduleName)}|${normalizedModuleName})`, 'i');
const segment = reqPath.replace(regex, '');
const actionExtends = _.filter(actionList, { collection_key: moduleName, is_extend: true });
let resultInterfaces = [];
actionExtends.forEach(async actionExtend => {
const interfaceKey = actionExtend.collection_key;
const interfaceObj = interfacesMapping[interfaceKey][actionExtend.action];
if (interfaceObj) {
const fieldListInterfaces = await buildFieldListFromInterface(interfaceObj, segment);
resultInterfaces.push(buildResultFromInterface(actionExtend, fieldListInterfaces));
}
});
return Response.success(req, res, resultInterfaces, {}, {
type: 'CRUD',
action: 'OBJECT',
typeName: Collection.collection.collectionName,
options: {}
});
} catch (e) {
return Response.error(req, res, e);
}
}
};