File: //home/arjun/projects/good-life-be/models/User.js
import { Sequelize, DataTypes } from 'sequelize';
import crypto from 'crypto';
import sequelize from '../config/sequelize-config.js';
import Login from './Login.js';
const User = sequelize.define(
'user',
{
id: {
primaryKey: true,
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4, // Automatically generates a UUID v4
},
first_name: {
type: DataTypes.STRING,
allowNull: false,
},
second_name: {
type: DataTypes.STRING,
allowNull: true,
},
role: {
type: DataTypes.ENUM('admin', 'user'),
allowNull: false,
},
profile_image: {
type: DataTypes.STRING,
allowNull: true,
},
is_deleted: {
type: DataTypes.BOOLEAN,
defaultValue: false,
},
is_verified: {
type: DataTypes.BOOLEAN,
defaultValue: false,
},
verification_token: {
type: DataTypes.STRING,
allowNull: true, // Store token for verification
},
status: {
type: DataTypes.ENUM('active', 'pending', 'blocked'),
defaultValue: 'pending',
},
eventStatus: {
type: DataTypes.ENUM('active', 'pending'),
defaultValue: 'pending',
},
createdAt: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
onUpdate: Sequelize.literal('CURRENT_TIMESTAMP'),
},
},
{
timestamps: true,
hooks: {
beforeCreate: (user) => {
user.verification_token = crypto.randomBytes(20).toString('hex');
},
},
}
);
User.hasOne(Login, { foreignKey: 'user_id' }); // Standard association
export default User;