UNPKG

@tasolutions/express-core

Version:
47 lines (42 loc) 1.99 kB
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); } } };