quickstruc
Version:
quickstruc is a Node.js-powered module designed to streamline project scaffolding.
101 lines (100 loc) • 3.44 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.User = void 0;
const sequelize_1 = require("sequelize");
const bcrypt_1 = __importDefault(require("bcrypt"));
const mysqlConfig_1 = require("../config/mysqlConfig"); // Assuming mysqlConfig.ts is in the config directory
class User extends sequelize_1.Model {
/**
* Compares the provided password with the user's hashed password.
* @param password - The password to be compared.
* @returns - Returns true if the password matches, false otherwise.
*/
comparePassword(password) {
return __awaiter(this, void 0, void 0, function* () {
return bcrypt_1.default.compare(password, this.password);
});
}
}
exports.User = User;
// Initialize the User model
User.init({
id: {
type: sequelize_1.DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
username: {
type: sequelize_1.DataTypes.STRING,
allowNull: false,
unique: true, // Ensure usernames are unique
validate: {
notNull: {
msg: "Username is required",
},
notEmpty: {
msg: "Username cannot be empty",
},
},
},
email: {
type: sequelize_1.DataTypes.STRING,
allowNull: false,
unique: true, // Ensure emails are unique
validate: {
notNull: {
msg: "Email is required",
},
isEmail: {
msg: "Please provide a valid email address",
},
},
},
password: {
type: sequelize_1.DataTypes.STRING,
allowNull: false,
validate: {
notNull: {
msg: "Password is required",
},
notEmpty: {
msg: "Password cannot be empty",
},
len: {
args: [6, 100],
msg: "Password must be at least 6 characters long",
},
},
},
createdAt: {
type: sequelize_1.DataTypes.DATE,
defaultValue: sequelize_1.DataTypes.NOW,
},
updatedAt: {
type: sequelize_1.DataTypes.DATE,
defaultValue: sequelize_1.DataTypes.NOW,
},
}, {
sequelize: mysqlConfig_1.sequelize,
modelName: "User",
});
/**
* Before creating a new user, hash the password using bcrypt.
*/
User.addHook("beforeCreate", (user) => __awaiter(void 0, void 0, void 0, function* () {
if (user.password) {
user.password = yield bcrypt_1.default.hash(user.password, 16);
}
}));