diff --git a/server/controllers/GPS.User.js b/server/controllers/GPS.User.js index c1bcfdc..4e79f54 100644 --- a/server/controllers/GPS.User.js +++ b/server/controllers/GPS.User.js @@ -361,6 +361,109 @@ module.exports.getUserForAdmin = async (req, res) => { } } +module.exports.updateUserByAdmin = [ + [ + body('first_name') + .optional() + .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') + .optional() + .notEmpty() + .withMessage(_faSr.required.last_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') + .optional() + .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, _id: { $ne: req.params.id } }).then(user => { + if (user && user.national_code === nationalCode) + return Promise.reject(new Error('کاربر با این کد ملی از قبل وجود دارد')) + else return true + }) + }), + + body('shopName').optional().notEmpty().withMessage(_faSr.required.address), + + body('mobile_number') + .optional() + .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, _id: { $ne: req.params.id } }).then(user => { + if (user && user.mobile_number === mobileNumber) + return Promise.reject(new Error('کاربر با این شماره موبایل از قبل وجود دارد')) + else return true + }) + }), + + body('cell_number').optional().notEmpty().withMessage(_faSr.required.phone_number).bail(), + body('birthDate').optional().notEmpty().withMessage(_faSr.required.birthdate).bail(), + body('address').optional().notEmpty().withMessage(_faSr.required.address).bail() + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { first_name, last_name, national_code, mobile_number, shopName, birthDate, address, cell_number } = + req.body + + const data = { + first_name: nameOptimizer(first_name), + last_name, + national_code: national_code.trim(), + mobile_number: normalizeMobileNumber(mobile_number), + shopName, + birthDate, + address, + cell_number + } + // const existMobile = await User.findOne({ mobile_number, _id: { $ne: req.params.id } }) + // if (existMobile) return res.status(400).json({ msg: 'این شماره موبایل قبلا ثبت شده است' }) + + const updateUser = await User.findByIdAndUpdate(req.params.id, data, { new: true }) + if (!updateUser) return res.status(404).json({ msg: _sr.fa.not_found.user_id }) + return res.status(200).json({ message: _faSr.response.success_update, user: updateUser }) + } catch (error) { + const registerFailurMsg = 'مشکلی پیش آمده، لطفا مجددا تلاش کنید' + res500(res, registerFailurMsg) + } + } +] + module.exports.activeUser = [ [ param('status').notEmpty().isBoolean().withMessage('این استاتوس اشتباه است'), diff --git a/server/plugins/serverResponses.js b/server/plugins/serverResponses.js index ecd8624..624927f 100644 --- a/server/plugins/serverResponses.js +++ b/server/plugins/serverResponses.js @@ -119,6 +119,7 @@ module.exports._sr = { unauthenticated: 'غیرمجاز', recovery_link: 'لینک بازیابی فرستاده شد', success_save: 'با موفقیت ثبت شد', + success_update: 'با موفقیت ثبت شد', success_remove: 'با موفقیت حذف شد', cart_empty: 'سبد خرید خالی است', already_has_address: 'آدرس قبلا اضافه شده', diff --git a/server/routes/admin.js b/server/routes/admin.js index de40797..4fa34bd 100644 --- a/server/routes/admin.js +++ b/server/routes/admin.js @@ -34,73 +34,68 @@ const awardRequest = require('../controllers/GPS.AwardRequest') const userGPS = require('../controllers/GPS.User') const renewal = require('../controllers/GPS.Renewal') - /// //////////////////////////////////////////////////////// routes - /// ///////////////////////////// GPS /// /////////////// Renewal -router.get('/gps/renew',hasPermission('gps'), renewal.findAllAdmin) - +router.get('/gps/renew', hasPermission('gps'), renewal.findAllAdmin) /// /////////////// User -router.get('/gps/users',hasPermission('gps'), userGPS.getUsersForAdmin) -router.get('/gps/users/pending',hasPermission('gps'), userGPS.getPendingUsersForAdmin) -router.get('/gps/users/:id',hasPermission('gps'), userGPS.getUserForAdmin) - -router.post('/gps/users',hasPermission('gps'), userGPS.addUserByAdmin) - -router.patch('/gps/users/:id/:status',hasPermission('gps'), userGPS.activeUser) +router.get('/gps/users', hasPermission('gps'), userGPS.getUsersForAdmin) +router.get('/gps/users/pending', hasPermission('gps'), userGPS.getPendingUsersForAdmin) +router.get('/gps/users/:id', hasPermission('gps'), userGPS.getUserForAdmin) +router.put('/gps/users/:id', hasPermission('gps'), userGPS.updateUserByAdmin) +router.post('/gps/users', hasPermission('gps'), userGPS.addUserByAdmin) +router.patch('/gps/users/:id/:status', hasPermission('gps'), userGPS.activeUser) /// ////////////// Award -router.post('/gps/award',hasPermission('gps'), award.createAward) -router.get('/gps/award',hasPermission('gps'), award.findAllAdmin) -router.get('/gps/award/:id',hasPermission('gps'), award.findOne) -router.put('/gps/award/:id',hasPermission('gps'), award.update) -router.delete('/gps/award/:id',hasPermission('gps'), award.delete) +router.post('/gps/award', hasPermission('gps'), award.createAward) +router.get('/gps/award', hasPermission('gps'), award.findAllAdmin) +router.get('/gps/award/:id', hasPermission('gps'), award.findOne) +router.put('/gps/award/:id', hasPermission('gps'), award.update) +router.delete('/gps/award/:id', hasPermission('gps'), award.delete) /// ////////////// Award request -router.get('/gps/award-request',hasPermission('gps'), awardRequest.findAllAdmin) -router.get('/gps/award-request/:id',hasPermission('gps'), awardRequest.findOne) -router.put('/gps/award-request/:id',hasPermission('gps'), awardRequest.update) +router.get('/gps/award-request', hasPermission('gps'), awardRequest.findAllAdmin) +router.get('/gps/award-request/:id', hasPermission('gps'), awardRequest.findOne) +router.put('/gps/award-request/:id', hasPermission('gps'), awardRequest.update) /// ////////////// Withdraw -router.get('/gps/withdraw',hasPermission('gps'), withdraw.getAllForAdmin) -router.patch('/gps/withdraw/:id/:type',hasPermission('gps'), withdraw.updateReq) +router.get('/gps/withdraw', hasPermission('gps'), withdraw.getAllForAdmin) +router.patch('/gps/withdraw/:id/:type', hasPermission('gps'), withdraw.updateReq) /// ////////////// Installed device router.patch('/gps/register-device/:id/:type', installedDevice.updateInstalled) router.get('/gps/register-device', installedDevice.getAllForAdmin) /// ////////////// Device -router.post('/gps/device',hasPermission('gps'), device.addCode) -router.post('/gps/device/exel',hasPermission('gps'), device.importExel) -router.get('/gps/device/exel',hasPermission('gps'), device.downloadAll) -router.get('/gps/device',hasPermission('gps'), device.getAll) -router.get('/gps/device/imei/:imei',hasPermission('gps'), device.getOneByIMEI) -router.get('/gps/device/id/:id',hasPermission('gps'), device.getOne) -router.put('/gps/device/:id',hasPermission('gps'), device.updateDevice) +router.post('/gps/device', hasPermission('gps'), device.addCode) +router.post('/gps/device/exel', hasPermission('gps'), device.importExel) +router.get('/gps/device/exel', hasPermission('gps'), device.downloadAll) +router.get('/gps/device', hasPermission('gps'), device.getAll) +router.get('/gps/device/imei/:imei', hasPermission('gps'), device.getOneByIMEI) +router.get('/gps/device/id/:id', hasPermission('gps'), device.getOne) +router.put('/gps/device/:id', hasPermission('gps'), device.updateDevice) /// ///////////////////////////////////////////////////////// /// ///////////// survey -router.get('/surveys',hasPermission('surveys'), surveyController.getAllForAdmin) -router.get('/surveys/:id',hasPermission('surveys'), surveyController.getOneForAdmin) +router.get('/surveys', hasPermission('surveys'), surveyController.getAllForAdmin) +router.get('/surveys/:id', hasPermission('surveys'), surveyController.getOneForAdmin) /// ///////////// Brand -router.post('/brand',hasPermission('brands'), brandController.createbrand) -router.get('/brand/:id',hasPermission('brands'), brandController.getbrand) -router.put('/brand/:id',hasPermission('brands'), brandController.updatebrand) -router.delete('/brand/:id',hasPermission('brands'), brandController.deletebrand) - +router.post('/brand', hasPermission('brands'), brandController.createbrand) +router.get('/brand/:id', hasPermission('brands'), brandController.getbrand) +router.put('/brand/:id', hasPermission('brands'), brandController.updatebrand) +router.delete('/brand/:id', hasPermission('brands'), brandController.deletebrand) /// ///////////// Complaint -router.get('/complaint',hasPermission('complaint'), complaintController.getsComplaint) -router.get('/complaint/:id',hasPermission('complaint'), complaintController.get) -router.put('/complaint/:id',hasPermission('apply'), complaintController.put) +router.get('/complaint', hasPermission('complaint'), complaintController.getsComplaint) +router.get('/complaint/:id', hasPermission('complaint'), complaintController.get) +router.put('/complaint/:id', hasPermission('apply'), complaintController.put) /// ///////////// warranty terms router.post('/warranty', hasPermission('warranty-terms'), warrantyTermsController.create) @@ -164,7 +159,6 @@ router.put('/user/changePanatechInfo/:id', hasPermission('customers'), userContr router.put('/user/update/:id', hasPermission('customers'), userController.update_user_by_admin) router.post('/user', hasPermission('customers'), userController.add_user) - /// ///////////// serials exel file router.post('/addExel', hasPermission('serials-exel'), serialsExelController.addExel) router.delete('/removeExel/:name', hasPermission('serials-exel'), serialsExelController.removeExel) @@ -266,7 +260,4 @@ router.get('/smsBroadcasts', hasPermission('sms'), smsBroadcastController.getAll router.get('/smsBroadcasts/:id', hasPermission('sms'), smsBroadcastController.getOneForAdmin) router.get('/usersForSMS', hasPermission('sms'), userController.get_all_users_for_admin) - - - module.exports = router