/** * 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: false, }, accountType: { type: DataTypes.ENUM("business_customer", "customer"), 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, }, }, { 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", }); }; return User; };