Initial commit

This commit is contained in:
payacom
2026-07-07 12:49:09 +03:30
parent 5719818b9d
commit a7e4f68495
3 changed files with 150 additions and 15 deletions

View File

@@ -1,6 +1,8 @@
/* eslint-disable camelcase */
const UserModel = require('../../../models/UserModel')
const jwt = require('jsonwebtoken')
const { validateUsername } = require('../../../utils/usernameValidation')
const { generateUsernameSuggestions } = require('../../../utils/usernameSuggestions')
const setUserName = async (req, res, next) => {
try {
@@ -20,32 +22,33 @@ const setUserName = async (req, res, next) => {
message: 'کاربری با این شماره موبایل یافت نشد'
})
}
// بررسی حداقل طول نام کاربری
if (user_name.length < 5) {
const validationError = validateUsername(user_name)
if (validationError) {
return res.status(422).json({
error: true,
message: 'نام کاربری باید حداقل 5 کاراکتر باشد'
message: validationError
})
}
// بررسی محدودیت‌های مجاز در نام کاربری
// const usernameRegex = /^[a-zA-Z0-9_]+$/
// if (!usernameRegex.test(user_name)) {
// return res.status(422).json({
// error: true,
// message: 'نام کاربری فقط می‌تواند شامل حروف الفبای انگلیسی، اعداد و کاراکتر _ باشد'
// })
// }
const normalizedUserName = user_name.trim().toLowerCase()
// بررسی تکراری بودن user_name
const existingUser = await UserModel.findOne({ user_name: { $regex: new RegExp('^' + user_name + '$', 'i') } })
const existingUser = await UserModel.findOne({ user_name: { $regex: new RegExp('^' + normalizedUserName + '$', 'i') } })
if (existingUser && existingUser._id.toString() !== user._id.toString()) {
const suggestions = await generateUsernameSuggestions(
UserModel,
normalizedUserName,
user._id.toString()
)
return res.status(422).json({
error: true,
message: 'نام کاربری تکراری است'
message: 'نام کاربری تکراری است',
suggestions
})
}
// آپدیت نام کاربری به صورت lowercase
user.user_name = user_name.toLowerCase()
user.user_name = normalizedUserName
await user.save()
return res.json({
@@ -73,7 +76,37 @@ const updateUserName = async (req, res, next) => {
})
}
const user = await UserModel.findByIdAndUpdate(userId, { user_name }, { new: true })
const validationError = validateUsername(user_name)
if (validationError) {
return res.status(422).json({
error: true,
message: validationError
})
}
const normalizedUserName = user_name.trim().toLowerCase()
const existingUser = await UserModel.findOne({
user_name: { $regex: new RegExp('^' + normalizedUserName + '$', 'i') }
})
if (existingUser && existingUser._id.toString() !== userId) {
const suggestions = await generateUsernameSuggestions(
UserModel,
normalizedUserName,
userId
)
return res.status(422).json({
error: true,
message: 'نام کاربری تکراری است',
suggestions
})
}
const user = await UserModel.findByIdAndUpdate(
userId,
{ user_name: normalizedUserName },
{ new: true }
)
if (!user) {
return res.status(404).json({