diff --git a/server/src/modules/db/collections.js b/server/src/modules/db/collections.js index fc9a16c..283bcf8 100644 --- a/server/src/modules/db/collections.js +++ b/server/src/modules/db/collections.js @@ -1,6 +1,7 @@ const { ObjectId } = require('mongodb'); const { MongoManager } = require('./mongo'); const { baseDefaults } = require('./schemas/common'); +const { collectionName:userCollectionName } = require('./schemas/user') const insertItem = async (collection, item) => { try { @@ -117,4 +118,5 @@ const createCollectionObject = (collectionName) => module.exports = { Video: createCollectionObject('videos'), Role: createCollectionObject('roles'), + User: createCollectionObject(userCollectionName), }; diff --git a/server/src/modules/db/schemas/user.js b/server/src/modules/db/schemas/user.js new file mode 100644 index 0000000..6aa5ae7 --- /dev/null +++ b/server/src/modules/db/schemas/user.js @@ -0,0 +1,59 @@ +const { baseSchema, ensureCollection } = require('./common'); + + +const collectionName = 'user'; + + +const updateSchema = async (db) => { + const validator = { + $jsonSchema: { + bsonType: 'object', + additionalProperties: false, + required: [ + 'email', + 'password', + ...Object.keys(baseSchema), + ], + properties: { + ...baseSchema, + name: { + bsonType: 'string', + description: 'must be a string and is required', + }, + email: { + bsonType: 'string', + description: 'must be a string and is required', + }, + password: { + bsonType: 'string', + description: 'must be a string and is required', + }, + isActive: { + bsonType: 'bool', + description: 'Whether the user is active', + }, + + + }, + }, + }; + + const indexes = [ + { + key: { name: 'text'}, + name: 'name_index', + }, + { + key: { email: 1 }, + unique: true, + name: 'email_index', + } + ]; + + await ensureCollection({ db, name:collectionName, validator, indexes }); +}; + +module.exports = { + updateSchema, + collectionName, +};