add new endpoint for add user by admin

This commit is contained in:
Mr Swift
2024-10-02 18:51:15 +03:30
parent 5c507ab708
commit 29e2e2a1b8
5 changed files with 353 additions and 2 deletions
+128
View File
@@ -429,4 +429,132 @@ module.exports.activeUser = [
res.status(200).json(data)
}
]
module.exports.addUserByAdmin = [
[
body('first_name')
.notEmpty()
.withMessage(_faSr.required.first_name)
.bail()
.isLength({ min: 2 })
.withMessage(_faSr.min_char.min2)
.bail()
.custom((value, { req }) => {
if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2)
if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید'))
else return true
}),
body('last_name')
.notEmpty()
.withMessage(_faSr.required.first_name)
.bail()
.isLength({ min: 2 })
.withMessage(_faSr.min_char.min2)
.bail()
.custom((value, { req }) => {
if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2)
if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید'))
else return true
}),
body('national_code')
.notEmpty()
.withMessage(_faSr.required.national_code)
.bail()
.custom((value, { req }) => {
if (checkNationalCode(value)) return true
else return Promise.reject(_faSr.format.national_code)
})
.bail()
.custom((value, { req }) => {
const nationalCode = value.trim()
return User.findOne({ national_code: nationalCode }).then(user => {
if (user && user.national_code === nationalCode)
return Promise.reject(new Error('کاربر با این کد ملی از قبل وجود دارد'))
else return true
})
}),
body('province_name').notEmpty().withMessage(_faSr.required.province),
body('city_name').notEmpty().withMessage(_faSr.required.city),
body('shopName')
.notEmpty()
.withMessage(_faSr.required.address),
body('mobile_number')
.notEmpty()
.withMessage(_faSr.required.phone_number)
.bail()
.custom((value, { req }) => {
const mobileNStatus = checkMobileNumber(value)
if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number)
else return Promise.resolve()
})
.bail()
.custom((value, { req }) => {
const mobileNumber = value.trim()
return User.findOne({ mobile_number: mobileNumber }).then(user => {
if (user && user.mobile_number === mobileNumber)
return Promise.reject(new Error('کاربر با این شماره موبایل از قبل وجود دارد'))
else return true
})
}),
body('password')
.isLength({ min: 4 })
.withMessage(_faSr.min_char.min4)
.custom((value, { req }) => {
if (value === req.body.password_confirmation) return true
else return Promise.reject(_faSr.response.passwords_not_match)
})
],
checkValidations(validationResult),
async (req, res) => {
try {
const provinceId = uid.v4()
const cityId = uid.v4()
const {
first_name,
last_name,
national_code,
province_name,
city_name,
mobile_number,
password,
shopName
} = req.body
const data = {
last_name,
province_name:{id:provinceId,provinceName:province_name},
city_name:{id:cityId,cityName:city_name},
shopName,
active:true
}
data.first_name = nameOptimizer(first_name)
data.national_code = national_code.trim()
data.mobile_number = normalizeMobileNumber(mobile_number)
// hash user password and done
const salt = await bcrypt.genSalt(10)
const hash = await bcrypt.hash(password, salt)
data.password = hash
const user = new User(data)
await user.save()
return res.status(200).json({ message: _faSr.response.success_save })
} catch (err) {
const registerFailurMsg = 'مشکلی در ثبت نام پیش آمده، لطفا مجددا تلاش کنید'
res500(res, registerFailurMsg)
}
}
]