user
unknown
plain_text
8 months ago
2.0 kB
3
Indexable
const mongoose = require("mongoose");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const userSchema = new mongoose.Schema({
username: {
type: String,
unique: true,
},
fullname: {
type: String,
// required: [true, 'Please add a username']
},
email: {
type: String,
required: [true, "Please add an email"],
unique: true,
match: [
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
"Please add a valid email",
],
},
role: {
type: String,
enum: ["user", "admin"],
default: "admin",
},
password: {
type: String,
// required: [true, 'Please add a password'],
minlength: 6,
select: false,
},
otp: {
type: String,
},
registerCode: {
type: String,
},
tickets: [
{
showtime: { type: mongoose.Schema.ObjectId, ref: "Showtime" },
seats: [
{
row: { type: String },
number: { type: Number },
},
],
price: Number,
qr: String,
ticketId: String,
},
],
isVerified: {
type: Boolean,
default: false
}, // Thêm trường này
createdAt: {
type: Date,
default: Date.now,
},
});
userSchema.pre("save", async function (next) {
if (!this.isModified("password")) {
return next();
}
const salt = await bcrypt.genSalt(10);
this.password = await bcrypt.hash(this.password, salt);
next();
});
userSchema.methods.getSignedJwtToken = function () {
return jwt.sign({ id: this._id }, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_EXPIRE,
});
};
userSchema.methods.matchPassword = async function (enteredPassword) {
return await bcrypt.compare(enteredPassword, this.password);
};
module.exports = mongoose.model("User", userSchema);
Editor is loading...
Leave a Comment