const { ROLES, REGIONS } = require('../config/constants'); module.exports = (sequelize, DataTypes) => { const User = sequelize.define('User', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true }, email: { type: DataTypes.STRING, unique: true, allowNull: false, validate: { isEmail: true } }, password: { type: DataTypes.STRING, allowNull: false }, name: { type: DataTypes.STRING, allowNull: false }, role: { type: DataTypes.ENUM(Object.values(ROLES)), allowNull: false }, region: { type: DataTypes.ENUM(Object.values(REGIONS)), allowNull: true }, zone: { type: DataTypes.STRING, allowNull: true }, phone: { type: DataTypes.STRING, allowNull: true }, status: { type: DataTypes.ENUM('active', 'inactive'), defaultValue: 'active' }, lastLogin: { type: DataTypes.DATE, allowNull: true } }, { tableName: 'users', timestamps: true, indexes: [ { fields: ['email'] }, { fields: ['role'] }, { fields: ['region'] }, { fields: ['zone'] } ] }); User.associate = (models) => { User.hasMany(models.Application, { foreignKey: 'submittedBy', as: 'applications' }); User.hasMany(models.Outlet, { foreignKey: 'dealerId', as: 'outlets' }); User.hasMany(models.Resignation, { foreignKey: 'dealerId', as: 'resignations' }); User.hasMany(models.ConstitutionalChange, { foreignKey: 'dealerId', as: 'constitutionalChanges' }); User.hasMany(models.RelocationRequest, { foreignKey: 'dealerId', as: 'relocationRequests' }); User.hasMany(models.AuditLog, { foreignKey: 'userId', as: 'auditLogs' }); }; return User; };