/** * Copyright (c) 2026 Niolla * All rights reserved. * * This source code is proprietary and confidential. * Unauthorized copying, modification, distribution, or use * of this file, via any medium, is strictly prohibited. */ // app/models/User.model.js module.exports = (sequelize, DataTypes) => { const User = sequelize.define( "User", { id: { type: DataTypes.STRING, primaryKey: true, collate: "utf8mb4_general_ci", }, firstName: { type: DataTypes.STRING, allowNull: false, }, lastName: { type: DataTypes.STRING, allowNull: false, }, email: { type: DataTypes.STRING, allowNull: false, unique: true, }, password: { type: DataTypes.STRING, allowNull: true, }, accountType: { type: DataTypes.ENUM("superadmin", "admin", "manager", "business_customer", "rider", "customer", "support_agent"), defaultValue: "customer", }, accountStatus: { type: DataTypes.ENUM( "PENDING_VERIFICATION", "ACTIVE", "SUSPENDED", "DEACTIVATED", ), allowNull: false, defaultValue: "PENDING_VERIFICATION", }, emailVerifiedAt: { type: DataTypes.DATE, allowNull: true, defaultValue: null, }, passwordChangedAt: { type: DataTypes.DATE, allowNull: true, defaultValue: null, }, tokenVersion: { type: DataTypes.INTEGER, allowNull: false, defaultValue: 0 }, lastLoginAt: { type: DataTypes.DATE, allowNull: true }, }, { tableName: "users", timestamps: true, }, ); User.associate = (db) => { User.hasMany(db.userPermission, { foreignKey: "user_id", as: "userPermissions", }); User.hasOne(db.Profile, { foreignKey: "user_id", as: "profile", }); User.hasOne(db.Customer, { foreignKey: "user_id", as: "customer", }); User.hasOne(db.BusinessCustomer, { foreignKey: "user_id", as: "businessCustomer", }); User.hasMany(db.AuthSession, { foreignKey: "user_id", as: "authSessions" }); User.hasMany(db.UserIdentity, { foreignKey: "user_id", as: "identities" }); User.hasMany(db.UserRole, { foreignKey: "user_id", as: "userRoles" }); }; return User; };