fcsc_ipi_backend/app/models/user.model.js
2025-12-04 17:28:33 +05:30

66 lines
1.5 KiB
JavaScript

module.exports = (sequelize, DataTypes) => {
const User = sequelize.define("admin_users", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
last_login: {
type: DataTypes.DATE,
allowNull: true,
},
reset_otp: {
type: DataTypes.STRING,
allowNull: true,
},
reset_otp_expires_at: {
type: DataTypes.DATE,
allowNull: true,
},
is_active: {
type: DataTypes.BOOLEAN,
defaultValue: true,
},
},
{
// 1. EXCLUDE sensitive fields from all queries
defaultScope: {
attributes: { exclude: ["password", "reset_otp", "reset_otp_expires_at"] },
},
// 2. Ensure manual selections still hide sensitive fields
scopes: {
withSensitive: {
attributes: { include: ["password", "reset_otp", "reset_otp_expires_at"] },
},
},
// 3. Remove sensitive fields when converting to JSON
instanceMethods: {
toJSON() {
const values = { ...this.get() };
delete values.password;
delete values.reset_otp;
delete values.reset_otp_expires_at;
return values;
},
},
}
);
return User;
};