HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
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;