const db = require('../config/database'); const bcrypt = require('bcryptjs'); class User { static async findById(id) { const users = await db.query('SELECT * FROM users WHERE id = ?', [id]); return users[0]; } static async findByIdAndRole(id, role) { const users = await db.query('SELECT * FROM users WHERE id = ? AND role = ?', [id, role]); return users[0]; } static async create(userData) { const { id, name, password, role, className } = userData; const salt = await bcrypt.genSalt(10); const hashedPassword = await bcrypt.hash(password, salt); await db.query( 'INSERT INTO users (id, name, password, role, class) VALUES (?, ?, ?, ?, ?)', [id, name, hashedPassword, role, className || null] ); return { id, name, role, class: className }; } static async verifyPassword(plainPassword, hashedPassword) { return await bcrypt.compare(plainPassword, hashedPassword); } static async updatePassword(id, newPassword) { const salt = await bcrypt.genSalt(10); const hashedPassword = await bcrypt.hash(newPassword, salt); await db.query('UPDATE users SET password = ? WHERE id = ?', [hashedPassword, id]); return true; } static async updateProfile(id, updateData) { const fields = []; const params = []; if (updateData.name) { fields.push('name = ?'); params.push(updateData.name); } if (updateData.class !== undefined) { fields.push('class = ?'); params.push(updateData.class); } if (fields.length === 0) return false; params.push(id); const sql = `UPDATE users SET ${fields.join(', ')} WHERE id = ?`; await db.query(sql, params); return true; } } module.exports = User;