node-rigorous
Version:
Rigorous Framework
63 lines (52 loc) • 2.07 kB
JavaScript
const mongoose = require('mongoose');
const createAttributesSchema = require('./create_schema_attributes_and_virtuals');
const setPrimaryKey = require('./set_primary_key');
const setObjectCrud = require('./set_crud_function');
const setExtraFunction = require('./set_extra_function');
const createSchema = require('./create_schema');
const setVirtuals = require('./set_virtual');
const setFilters = require('./set_filters');
const setHooks = require('./set_hooks');
const rigorousConfig = require('../../config');
module.exports = (attributeModelFolderPath, modelName, beforeCreateTransformation, extraFunctionTab, paginateMaxResultPerPage = rigorousConfig.PAGINATION_DEFAULT_MAX_RESULT_PER_PAGE) => {
const { attributesSchema, virtuals } = createAttributesSchema(attributeModelFolderPath);
const modelSettings = {
name: modelName,
attributesSchema: attributesSchema,
virtuals: virtuals,
paginate: {
result: {
max: paginateMaxResultPerPage,
},
},
transform: {
fields: {
before: {
create: beforeCreateTransformation,
},
},
},
extra: {
functions: extraFunctionTab,
},
/* hooks: {
pre: {
remove: null,
},
post: {
findOrfindOne: null,
anySave: null,
},
}, */
};
const schema = createSchema(modelName, modelSettings.attributesSchema);
// Clé unique = combinaison de 2 champs
setPrimaryKey(schema, modelName, modelSettings.attributesSchema);
setVirtuals(schema, modelSettings.virtuals);
setObjectCrud(schema, modelSettings);
setFilters(schema, modelSettings.attributesSchema);
setExtraFunction(schema, modelSettings.extra.functions);
// setHooks(schema, modelSettings.hooks);
const model = mongoose.model(modelName, schema, `${modelName.toLowerCase()}s`);
return model;
};