You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.1 KiB
112 lines
2.1 KiB
const mongoose = require('mongoose');
|
|
|
|
//pour vérifier la validité d'une adresse mail
|
|
const { isEmail } = require('validator');
|
|
const bcrypt = require('bcrypt');
|
|
|
|
|
|
const NotifSchema = new mongoose.Schema({
|
|
typeNotif: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
id_user: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
id_post1: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
id_post2: {
|
|
type: String,
|
|
required: true
|
|
}
|
|
});
|
|
|
|
const PictureSchema = new mongoose.Schema({
|
|
data: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
contentType: {
|
|
type: String,
|
|
required: true,
|
|
}
|
|
});
|
|
|
|
|
|
//trim pour supprimer les espaces
|
|
const userSchema = new mongoose.Schema(
|
|
{
|
|
pseudo: {
|
|
type: String,
|
|
required: true,
|
|
minLength: 3,
|
|
maxLength: 55,
|
|
unique: true,
|
|
trim: true
|
|
},
|
|
email: {
|
|
type: String,
|
|
required: true,
|
|
validate: [isEmail],
|
|
lowercase: true,
|
|
unique: true,
|
|
trim: true
|
|
},
|
|
password: {
|
|
type: String,
|
|
required: true,
|
|
max: 1024,
|
|
minlength: 6
|
|
},
|
|
picture: {
|
|
type: PictureSchema,
|
|
default: "./random-user.png"
|
|
},
|
|
bio :{
|
|
type: String,
|
|
max: 1024,
|
|
},
|
|
followers: {
|
|
type: [String]
|
|
},
|
|
following: {
|
|
type: [String]
|
|
},
|
|
likes: {
|
|
type: [String]
|
|
},
|
|
notif: [NotifSchema]
|
|
},
|
|
{
|
|
timestamps: true,
|
|
}
|
|
);
|
|
|
|
//timestamps pour savoir quand l'utilisateur c'est connecté
|
|
|
|
// play function before save into display: 'block',
|
|
userSchema.pre("save", async function(next) {
|
|
const salt = await bcrypt.genSalt();
|
|
this.password = await bcrypt.hash(this.password, salt);
|
|
next();
|
|
});
|
|
|
|
userSchema.statics.login = async function({email, password}) {
|
|
const user = await this.findOne( {email} );
|
|
console.log(user);
|
|
if (user) {
|
|
const auth = await bcrypt.compare(password, user.password);
|
|
if (auth) {
|
|
return user;
|
|
}
|
|
throw Error('incorrect password');
|
|
}
|
|
throw Error('incorrect email')
|
|
};
|
|
|
|
const UserModel = mongoose.model("user", userSchema);
|
|
module.exports = UserModel;
|