mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
adjusted
This commit is contained in:
@@ -28,6 +28,7 @@ const bcrypt = require('bcryptjs');
|
||||
const sequelize = require('../config/db.config')
|
||||
const mdl_Users = require('../models/users/users.mdl');
|
||||
const mdl_UserSessions = require('../models/users/user_sessions.mdl');
|
||||
const { mdl_UserGroups, mdl_UserGroupMembers } = require('../models/users/user_groups.mdl')
|
||||
const { generateTokens, verifyRefreshToken, hashToken, shouldRotateRefreshToken } = require('../utils/token.util');
|
||||
const { generateOTP, getOTPExpiry, isOTPExpired } = require('../utils/otp.util');
|
||||
const sendEmail = require('../services/email.service');
|
||||
@@ -53,32 +54,53 @@ const safeUser = (user, extraExclude = []) => {
|
||||
// ─── Register ──────────────────────────────────────────────────────────────────
|
||||
exports.register = async (req, res) => {
|
||||
const transaction = await sequelize.transaction();
|
||||
|
||||
|
||||
try {
|
||||
const { email, password } = req.body;
|
||||
|
||||
const { email, password, personal_info, group_code } = req.body;
|
||||
|
||||
// ── Duplicate check ───────────────────────────────────────────────────────
|
||||
const existing = await mdl_Users.findOne({ where: { email } });
|
||||
if (existing) return R.error(res, 'Email is already registered.', 409);
|
||||
|
||||
|
||||
// ── Validate group_code if provided ───────────────────────────────────────
|
||||
let group = null;
|
||||
if (group_code) {
|
||||
group = await mdl_UserGroups.findOne({
|
||||
where: { group_code: group_code.toUpperCase().trim(), is_active: true },
|
||||
});
|
||||
if (!group) return R.error(res, 'Invalid or inactive group code.', 400);
|
||||
}
|
||||
|
||||
// ── Create user ───────────────────────────────────────────────────────────
|
||||
const hashed = await bcrypt.hash(password, 12);
|
||||
const otp = generateOTP();
|
||||
|
||||
const otp = generateOTP();
|
||||
|
||||
const user = await mdl_Users.create({
|
||||
email,
|
||||
password: hashed,
|
||||
otp_code: otp,
|
||||
password: hashed,
|
||||
otp_code: otp,
|
||||
otp_expires_at: getOTPExpiry(),
|
||||
is_active: true,
|
||||
is_verified: false,
|
||||
reg_type: 'system',
|
||||
acc_type: 'user',
|
||||
createdBy: null,
|
||||
is_active: true,
|
||||
is_verified: false,
|
||||
reg_type: 'system',
|
||||
acc_type: 'user',
|
||||
personal_info: personal_info ?? null,
|
||||
createdBy: null,
|
||||
}, { transaction });
|
||||
|
||||
await sendEmail({ to: email, type: "OTP", data: { otp } });
|
||||
|
||||
|
||||
// ── Enroll into group ─────────────────────────────────────────────────────
|
||||
if (group) {
|
||||
await mdl_UserGroupMembers.create({
|
||||
group_id: group.group_id,
|
||||
user_id: user.user_id,
|
||||
createdBy: null,
|
||||
}, { transaction });
|
||||
}
|
||||
|
||||
await sendEmail({ to: email, type: 'OTP', data: { otp } });
|
||||
|
||||
await transaction.commit();
|
||||
|
||||
|
||||
return R.success(res, 'Registration successful. Please check your email for the OTP.', {
|
||||
email: user.email,
|
||||
}, 201);
|
||||
|
||||
Reference in New Issue
Block a user