Modelo User 🚶🏼♂️🚶🏻♀️
Puesto que vamos a guardar los detalles de usuario en Mongo, vamos a crear un modelo de usuario en Mongoose vamos a guardar este modelo dentro de la carpeta /api/user puesto que también estos registros serán expuestos atraves de una API.
Primero vamos a instalar las dependencias que vamos a necesitar para esta parte.
# Install dependecies
npm i -S crypto Schema
Luego de esto vamos crear nuestro modelo
/**
* user model
*/
const crypto = require('crypto');
const mongoose = require('mongoose');
const { Schema } = mongoose;
const authTypes = ['github', 'twitter', 'facebook', 'google'];
const AdditionalDataSchema = new Schema({
address: { type: String, uppercase: true },
phoneNumber: { type: String },
country: { type: String, default: 'COLOMBIA', uppercase: true },
city: { type: String, default: 'MEDELLIN', uppercase: true },
language: { type: String, default: 'ES', uppercase: true },
timeZone: { type: String, default: 'America/Bogota' },
picture: { type: String, lowercase: true, trim: true },
}, { _id: false });
const UserSchema = new Schema({
name: String,
email: {
type: String,
lowercase: true,
unique: true,
trim: true,
required() {
if (authTypes.indexOf(this.provider) === -1) {
return true;
}
return false;
},
},
role: { type: String, default: 'user' },
password: {
type: String,
required() {
if (authTypes.indexOf(this.provider) === -1) {
return true;
}
return false;
},
},
additionalData: AdditionalDataSchema,
provider: String,
salt: String,
google: {},
github: {},
passwordResetToken: String,
passwordResetExpires: Date,
}, { timestamps: true });
UserSchema
.path('role')
.validate(value => /admin|manager|user/i.test(value), 'role, assigned role is invalid');
module.exports = mongoose.model('User', UserSchema);Schema Virtual
Los esquemas virtuales son campos adicionales para un modelo dado. Sus valores se pueden configurar de forma manual o automática con la funcionalidad definida. Una propiedad virtual común es el nombre completo de una persona, compuesto por el nombre y apellido del usuario.
Ejemplo: UserSchema.virtual('fullname').get(() => (${this.first} ${this.last}));
Vamos agregar a nuestro archivo api/user/user.model.js el siguiente código:
Schema Validation
La validación de esquema de JSON extiende la validación de documentos de muchas maneras diferentes, incluida la capacidad de imponer esquemas dentro de arrays y evitar que se agreguen atributos no aprobados.
Para nuestro caso de uso vamos adicionar validaciones para el campo email y password con el siguiente código:
Schema Hook
Schema Methods
Recuerda que debes agregar todo a tu archivo.
Repositorio: Create the User's model
Last updated
Was this helpful?