nodejs-rigorous
Version:
Rigorous Framework
67 lines (54 loc) • 2.4 kB
JavaScript
const mongoose = require('mongoose');
const createAttributesSchema = require('./create_schema_attributes_and_virtuals');
const createFilter = require('./create_filter');
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 setHooks = require('./set_hooks');
const rigorousConfig = require('../../config');
module.exports = (mongoose, 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(mongoose, modelSettings.attributesSchema);
// Clé unique = combinaison de 2 champs
setPrimaryKey(schema, modelSettings.attributesSchema);
setVirtuals(schema, modelSettings.virtuals);
setObjectCrud(schema, modelSettings);
setExtraFunction(schema, modelSettings.extra.functions);
// setHooks(schema, modelSettings.hooks);
const ObjectCollection = mongoose.model(modelName, schema);
ObjectCollection.FILTER_PUBLIC = createFilter(modelSettings.attributesSchema, rigorousConfig.FILTER_ATTRIBUTE_LEVEL.PUBLIC);
ObjectCollection.FILTER_OWNER = createFilter(modelSettings.attributesSchema, rigorousConfig.FILTER_ATTRIBUTE_LEVEL.OWNER);
ObjectCollection.FILTER_SECRET = createFilter(modelSettings.attributesSchema, rigorousConfig.FILTER_ATTRIBUTE_LEVEL.SECRET);
return ObjectCollection;
};