UNPKG

nodejs-rigorous

Version:
67 lines (54 loc) 2.4 kB
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; };