Implement user registration and email verification features

This commit is contained in:
Isuru Bimsara
2026-08-17 16:52:44 +05:30
parent ef8db0988b
commit c3d9f899a1
11 changed files with 781 additions and 53 deletions
+1
View File
@@ -41,6 +41,7 @@ db.sequelize = sequelize;
// User and Authentication
db.User = require("./user/user.model")(sequelize, DataTypes);
db.EmailVerification = require("./user/emailVerification.model")(sequelize,DataTypes);
db.UserActivity = require("./activities/userActivities.model")(sequelize, DataTypes);
db.Profile = require("./user/profile.model")(sequelize, DataTypes);
@@ -0,0 +1,46 @@
//app/models/user/emailVerification.model.js
module.exports = (sequelize, DataTypes) => {
const EmailVerification = sequelize.define(
"EmailVerification",
{
id: {
type: DataTypes.STRING,
primaryKey: true,
},
user_id: {
type: DataTypes.STRING,
allowNull: false,
},
tokenHash: {
type: DataTypes.STRING,
allowNull: false,
},
expiresAt: {
type: DataTypes.DATE,
allowNull: false,
},
usedAt: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
},
},
{
tableName: "email_verifications",
timestamps: true,
}
);
EmailVerification.associate = (db) => {
EmailVerification.belongsTo(db.User, {
foreignKey: "user_id",
as: "user",
});
};
return EmailVerification;
};
+24 -3
View File
@@ -36,9 +36,25 @@ module.exports = (sequelize, DataTypes) => {
allowNull: false
},
accountType: {
type: DataTypes.ENUM("user", "admin", "superadmin", "manager", "business_customer", "rider", "customer","support_agent"),
defaultValue: "user"
}
type: DataTypes.ENUM("admin", "superadmin", "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,
},
},
{
tableName: "users",
@@ -55,6 +71,11 @@ module.exports = (sequelize, DataTypes) => {
foreignKey: "user_id",
as: "profile",
});
User.hasMany(db.EmailVerification, {
foreignKey: "user_id",
as: "emailVerifications",
});
};
return User;