const mongoose = require('mongoose'); const bcrypt = require('bcryptjs'); const userSchema = new mongoose.Schema({ email: { type: String, required: true, unique: true, lowercase: true, trim: true, match: /^[^\s@]+@[^\s@]+\.[^\s@]+$/ }, password: { type: String, required: true, minlength: 8 }, firstName: { type: String, required: true }, lastName: { type: String, required: true }, position: String, phone: String, companyId: { type: mongoose.Schema.Types.ObjectId, ref: 'Company' }, createdAt: { type: Date, default: Date.now }, updatedAt: { type: Date, default: Date.now } }, { collection: 'users', minimize: false, toObject: { versionKey: false } }); userSchema.set('toObject', { virtuals: false, versionKey: false }); // Хешировать пароль перед сохранением userSchema.pre('save', async function(next) { if (!this.isModified('password')) return next(); try { const salt = await bcrypt.genSalt(10); this.password = await bcrypt.hash(this.password, salt); next(); } catch (error) { next(error); } }); // Метод для сравнения паролей userSchema.methods.comparePassword = async function(candidatePassword) { return await bcrypt.compare(candidatePassword, this.password); }; // Скрыть пароль при преобразовании в JSON userSchema.methods.toJSON = function() { const obj = this.toObject(); delete obj.password; return obj; }; module.exports = mongoose.model('User', userSchema);