@tasolutions/express-core
Version:
All libs for express
52 lines (45 loc) • 1.93 kB
JavaScript
const _ = require('lodash');
const { apiGWInfo } = require('../../../config');
const { getActions, fieldsToExclude } = require('./constants');
const mongoose = require('mongoose');
const { coverRequiredFields } = require('../utils/cover');
const { buildFieldListSelect } = require('./fieldBuilderSelect');
module.exports = {
createObjectSelectOption: async (field, segment = '/') => {
const ref = field.options?.ref;
if (!ref) {
throw new Error(`Ref is undefined for field: ${field.path}`);
}
const Model = mongoose.model(ref);
if (!Model) {
throw new Error(`Model not found for ref: ${ref}`);
}
const actions = getActions(Model.schema);
const fieldKeys = Object.keys(Model.schema.paths).filter(key => !fieldsToExclude.includes(key));
if (fieldKeys.length === 0) {
throw new Error(`No fields found in the ${ref} model.`);
}
const fieldList = await buildFieldListSelect(Model, segment);
const requiredFields = field.options?.required_fields || null;
const requestFields = fieldList.filter(field =>
requiredFields && requiredFields.includes(field.key)
);
const refPath = ref.replace('_', '-');
return {
api: {
path: `${apiGWInfo.prefix}${segment}${refPath}`,
url: `${apiGWInfo.url}${segment}${refPath}`,
method: actions.LIST.method,
limit: -1,
type: ref,
content_type: 'application/json',
request_fields: requestFields.length ? requestFields : null,
required_fields: requiredFields ? coverRequiredFields(requiredFields) : null,
},
response_fields: fieldList,
values: null,
field_submit: '_id',
field_display: fieldKeys[0],
};
}
}