Add full project files
This commit is contained in:
410
controllers/panel/users/usersController.js
Normal file
410
controllers/panel/users/usersController.js
Normal file
@@ -0,0 +1,410 @@
|
||||
/* eslint-disable no-unused-vars */
|
||||
/* eslint-disable camelcase */
|
||||
const { default: mongoose } = require('mongoose')
|
||||
const UserModel = require('../../../models/UserModel')
|
||||
const jMoment = require('moment-jalaali')
|
||||
const NotificationModel = require('../../../models/NotificationModel')
|
||||
const { default: axios } = require('axios')
|
||||
|
||||
const getUsers = async (req, res, next) => {
|
||||
try {
|
||||
// بررسی توکن
|
||||
const token = req.header('Authorization')?.split(' ')[1];
|
||||
if (!token) return res.status(401).send('Access Denied');
|
||||
|
||||
// پارامترهای query
|
||||
const {
|
||||
page = 1,
|
||||
limit = 20,
|
||||
expertise,
|
||||
most_price,
|
||||
most_requests,
|
||||
age,
|
||||
gender,
|
||||
startDate,
|
||||
endDate,
|
||||
status,
|
||||
search
|
||||
} = req.query;
|
||||
|
||||
const filter = {}; // شرطهای فیلتر
|
||||
|
||||
// فیلتر تاریخ
|
||||
if (startDate || endDate) {
|
||||
filter.createdAt = {};
|
||||
if (startDate) filter.createdAt.$gte = new Date(startDate);
|
||||
if (endDate) filter.createdAt.$lte = new Date(endDate);
|
||||
}
|
||||
|
||||
// فیلتر وضعیت
|
||||
if (status) {
|
||||
filter.is_verified = status;
|
||||
}
|
||||
|
||||
// فیلتر سرچ
|
||||
if (search) {
|
||||
const regex = new RegExp(search, "i"); // i = ignore case
|
||||
filter.$or = [
|
||||
{ first_name: regex },
|
||||
{ last_name: regex },
|
||||
{ user_name: regex },
|
||||
{ mobile: regex }
|
||||
];
|
||||
}
|
||||
|
||||
// فیلترهای دیگر (اختیاری)
|
||||
if (expertise) filter.expertise = expertise;
|
||||
if (age) filter.age = age;
|
||||
if (gender) filter.gender = gender;
|
||||
|
||||
// گزینههای صفحهبندی
|
||||
const options = {
|
||||
page: parseInt(page),
|
||||
limit: parseInt(limit),
|
||||
sort: { createdAt: -1 }
|
||||
};
|
||||
|
||||
// گرفتن کاربران با paginate
|
||||
const users = await UserModel.paginate(filter, options);
|
||||
|
||||
// آمادهسازی خروجی
|
||||
const newUsers = users.docs.map(user => ({
|
||||
_id: user._id,
|
||||
mobile: user.mobile,
|
||||
user_name: user.user_name,
|
||||
first_name: user.first_name,
|
||||
last_name: user.last_name,
|
||||
user_type: user.user_type,
|
||||
is_verified: user.is_verified,
|
||||
profile_image: user.profile_image,
|
||||
expertise: user.expertise,
|
||||
sub_expertise: user.sub_expertise,
|
||||
gender: user.gender,
|
||||
national_code: user.national_code,
|
||||
province: user.province,
|
||||
city: user.city,
|
||||
last_online: jMoment(user.last_online).format('jYYYY-jMM-jDD HH:mm'),
|
||||
createdAt: jMoment(user.createdAt).format('jYYYY-jMM-jDD HH:mm'),
|
||||
block_status: user.block_status
|
||||
}));
|
||||
|
||||
res.status(200).json({
|
||||
users: newUsers,
|
||||
totalPages: users.totalPages,
|
||||
totalItems: users.totalDocs
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in getUsers:', error);
|
||||
res.status(500).json({ message: 'خطا در دریافت کاربران.' });
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
// const getUsers = async (req, res, next) => {
|
||||
// try {
|
||||
// const token = req.header('Authorization').split(' ')[1]
|
||||
// if (!token) return res.status(401).send('Access Denied')
|
||||
|
||||
// // eslint-disable-next-line no-unused-vars
|
||||
// const {
|
||||
// page = 1,
|
||||
// limit = 10,
|
||||
// expertise,
|
||||
// most_price,
|
||||
// most_requests,
|
||||
// age,
|
||||
// gender,
|
||||
// startDate,
|
||||
// endDate,
|
||||
// status
|
||||
// } = req.query
|
||||
// const filter = {} // افزودن شرطهای دیگر برای فیلتر
|
||||
|
||||
// // Date
|
||||
// if (startDate || endDate) {
|
||||
// filter.createdAt = {}
|
||||
|
||||
// if (startDate) {
|
||||
// filter.createdAt.$gte = new Date(startDate) // تاریخ شروع
|
||||
// }
|
||||
|
||||
// if (endDate) {
|
||||
// filter.createdAt.$lte = new Date(endDate) // تاریخ پایان
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (status) {
|
||||
// filter.is_verified = status
|
||||
// }
|
||||
|
||||
// // if (expertise) {
|
||||
// // filter.expertise = expertise
|
||||
// // }
|
||||
// // if (age) {
|
||||
// // filter.age = age
|
||||
// // }
|
||||
// // if (gender) {
|
||||
// // filter.gender = gender
|
||||
// // }
|
||||
// // استفاده از مدل پیجینیت شده برای دریافت نتایج صفحهبندی شده
|
||||
// const options = {
|
||||
// page: parseInt(page), // تبدیل صفحه به عدد صحیح
|
||||
// limit: parseInt(limit), // تبدیل محدودیت به عدد صحیح
|
||||
// sort: { createdAt: -1 }
|
||||
// }
|
||||
// const users = await UserModel.paginate(filter, options)
|
||||
// const newUsers = users.docs.map(user => ({
|
||||
// _id: user._id,
|
||||
// mobile: user.mobile,
|
||||
// user_name: user.user_name,
|
||||
// first_name: user.first_name,
|
||||
// last_name: user.last_name,
|
||||
// user_type: user.user_type,
|
||||
// is_verified: user.is_verified,
|
||||
// profile_image: user.profile_image,
|
||||
// expertise: user.expertise,
|
||||
// sub_expertise: user.sub_expertise,
|
||||
// gender: user.gender,
|
||||
// national_code: user.national_code,
|
||||
// province: user.province,
|
||||
// city: user.city,
|
||||
// last_online: jMoment(user.last_online).format('jYYYY-jMM-jDD HH:mm'),
|
||||
// createdAt: jMoment(user.createdAt).format('jYYYY-jMM-jDD HH:mm'),
|
||||
// block_status: user.block_status
|
||||
// }))
|
||||
// res.status(200).json({
|
||||
// users: newUsers,
|
||||
// totalPages: users.totalPages, // ارسال تعداد کل صفحات
|
||||
// totalItems: users.totalDocs // ارسال تعداد کل آیتمها
|
||||
// })
|
||||
// } catch (error) {
|
||||
// // در صورت بروز خطا، ارسال پیام خطا به کاربر
|
||||
// console.error('Error in getProjectTypes:', error)
|
||||
// res.status(500).json({ message: 'خطا در دریافت انواع پروژه.' })
|
||||
// }
|
||||
// }
|
||||
const getUserDetail = async (req, res, next) => {
|
||||
try {
|
||||
const token = req.header('Authorization').split(' ')[1]
|
||||
if (!token) return res.status(401).send('Access Denied')
|
||||
const user_id = req.query.user_id
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
|
||||
if (!mongoose.Types.ObjectId.isValid(user_id)) {
|
||||
return res.status(400).json({ message: 'شناسه کاربر معتبر نیست' })
|
||||
}
|
||||
const user = await UserModel.findById(user_id)
|
||||
|
||||
if (!user) {
|
||||
return res.status(404).json({ message: 'کاربر مورد نظر یافت نشد' })
|
||||
}
|
||||
|
||||
const response = {
|
||||
_id: user?._id,
|
||||
profile_image: user?.profile_image,
|
||||
first_name: user?.first_name,
|
||||
last_name: user?.last_name,
|
||||
user_name: user?.user_name,
|
||||
mobile: user?.mobile,
|
||||
national_code: user?.national_code,
|
||||
province: user?.province,
|
||||
city: user?.city,
|
||||
address: user?.address,
|
||||
height: user?.height,
|
||||
weight: user?.weight,
|
||||
size: user?.size,
|
||||
birthday: user?.birthday,
|
||||
show_location: user?.show_location,
|
||||
cooperation_abroad: user?.cooperation_abroad,
|
||||
conversation_projects: user?.conversation_projects,
|
||||
expertise: user?.expertise,
|
||||
sub_expertise: user?.sub_expertise,
|
||||
shaba: user?.shaba,
|
||||
national_card_image: user?.national_card_image,
|
||||
last_online: jMoment(user?.last_online).format('jYYYY-jMM-jDD HH:mm'),
|
||||
createdAt: jMoment(user?.createdAt).format('jYYYY-jMM-jDD HH:mm'),
|
||||
block_status: user?.block_status,
|
||||
user_level: user?.user_level,
|
||||
user_type: user?.user_type,
|
||||
user_score: user?.user_score,
|
||||
services :user?.services,
|
||||
is_verified: user?.is_verified,
|
||||
rate: user?.rate,
|
||||
bio: user?.bio,
|
||||
eye_color: user?.eye_color,
|
||||
hair_color: user?.hair_color,
|
||||
lat: user?.lat,
|
||||
lng: user?.lng
|
||||
}
|
||||
return res.status(200).json({ user: response })
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
const updateUser = async (req, res, next) => {
|
||||
try {
|
||||
const userId = req.query.userId // دریافت شناسه کاربر از درخواست
|
||||
|
||||
// چک کردن اعتبار شناسه کاربر
|
||||
if (!mongoose.Types.ObjectId.isValid(userId)) {
|
||||
return res.status(400).json({ message: 'شناسه کاربر معتبر نیست' })
|
||||
}
|
||||
|
||||
// فیلدهایی که میخواهید آپدیت شوند را از درخواست دریافت کنید
|
||||
const updateFields = req.body
|
||||
|
||||
// اجرای آپدیت و بازگشت مقدار آپدیت شده
|
||||
const updatedUser = await UserModel.findByIdAndUpdate(
|
||||
userId,
|
||||
updateFields,
|
||||
{ new: true }
|
||||
)
|
||||
|
||||
// بررسی آیا کاربر وجود دارد یا نه
|
||||
if (!updatedUser) {
|
||||
return res.status(404).json({ message: 'کاربر مورد نظر یافت نشد' })
|
||||
}
|
||||
|
||||
// ارسال پاسخ با مقادیر آپدیت شده
|
||||
res.status(200).json({ message: 'کاربر با موفقیت ویرایش شد', id: updatedUser._id })
|
||||
} catch (error) {
|
||||
const errors = []
|
||||
|
||||
if (error.code === 11000) {
|
||||
// Duplicate key error
|
||||
for (const key in error.keyValue) {
|
||||
errors.push({ message: `ارور در فیلد ${key}` })
|
||||
}
|
||||
} else {
|
||||
errors.push({ message: 'خطا در آپدیت کاربر' })
|
||||
}
|
||||
|
||||
res.status(500).json({ errors })
|
||||
}
|
||||
}
|
||||
const verifyUser = async (req, res, next) => {
|
||||
try {
|
||||
const userId = req.query.userId // دریافت شناسه کاربر از درخواست
|
||||
const user = await UserModel.findById(userId)
|
||||
if (!user) {
|
||||
return res.status(404).json({ message: 'کاربر مورد نظر یافت نشد' })
|
||||
}
|
||||
user.is_verified = 'verified';
|
||||
user.is_Register = true;
|
||||
await user.save();
|
||||
|
||||
|
||||
const notification = new NotificationModel({
|
||||
user_id: userId,
|
||||
type: 'verify',
|
||||
title: 'تایید مدارک',
|
||||
description: 'مدارک ارسالی شما با موفقیت تایید شد'
|
||||
})
|
||||
await notification.save()
|
||||
|
||||
// Sms
|
||||
|
||||
const userReciver = await UserModel.findById(userId)
|
||||
|
||||
const data = JSON.stringify({
|
||||
mobile: userReciver?.mobile,
|
||||
templateId: '632057',
|
||||
parameters: [
|
||||
{ name: 'USERS', value: userReciver?.first_name + ' ' + userReciver?.last_name }
|
||||
]
|
||||
})
|
||||
|
||||
const config = {
|
||||
method: 'post',
|
||||
url: 'https://api.sms.ir/v1/send/verify',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Accept: 'text/plain',
|
||||
'x-api-key': '2JKxGbTzE64t0YTkjip6RYHnm9mq1haMlidF8WWwQunwubHFVW6iaMmfFQbMXEDt'
|
||||
},
|
||||
data
|
||||
}
|
||||
axios(config)
|
||||
.then(function (response) {
|
||||
})
|
||||
.catch(function (error) {
|
||||
console.log(error)
|
||||
})
|
||||
|
||||
// End Sms
|
||||
|
||||
// ارسال پاسخ با مقادیر آپدیت شده
|
||||
res.status(200).json({ message: 'مدارک کاربر با موفقیت تایید شد' })
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
|
||||
const updateUserStatus = async (req, res, next) => {
|
||||
try {
|
||||
const { userId, block_status } = req.body;
|
||||
|
||||
|
||||
if (!mongoose.Types.ObjectId.isValid(userId)) {
|
||||
return res.status(400).json({ message: 'شناسه کاربر معتبر نیست' });
|
||||
}
|
||||
|
||||
const user = await UserModel.findByIdAndUpdate(
|
||||
userId,
|
||||
{ block_status },
|
||||
{ new: true }
|
||||
);
|
||||
|
||||
if (!user) return res.status(404).json({ message: 'کاربر یافت نشد' });
|
||||
|
||||
res.status(200).json({ message: 'وضعیت کاربر با موفقیت تغییر کرد', block_status: user.block_status });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).json({ message: 'خطای سرور' });
|
||||
}
|
||||
};
|
||||
|
||||
const rejectUser = async (req, res, next) => {
|
||||
try {
|
||||
const userId = req.query.userId // دریافت شناسه کاربر از درخواست
|
||||
const user = await UserModel.findById(userId)
|
||||
if (!user) {
|
||||
return res.status(404).json({ message: 'کاربر مورد نظر یافت نشد' })
|
||||
}
|
||||
user.is_verified = 'rejected'
|
||||
user.is_Register = false
|
||||
await user.save()
|
||||
const notification = new NotificationModel({
|
||||
user_id: userId,
|
||||
type: 'reject-user',
|
||||
title: 'رد مدارک',
|
||||
description: 'مدارک ارسالی شما رد شد، برای اطلاعات بیشتر از بخش تیکت به پشتیبانی پیام دهید.'
|
||||
})
|
||||
await notification.save()
|
||||
|
||||
// ارسال پاسخ با مقادیر آپدیت شده
|
||||
res.status(200).json({ message: 'مدارک کاربر با موفقیت رد شد' })
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
const changePass = async (req, res, next) => {
|
||||
try {
|
||||
const { userId, password } = req.body;
|
||||
const user = await UserModel.findById(userId)
|
||||
if (!user) {
|
||||
return res.status(404).json({ message: 'کاربر مورد نظر یافت نشد' })
|
||||
}
|
||||
user.password = password
|
||||
await user.save()
|
||||
|
||||
// ارسال پاسخ با مقادیر آپدیت شده
|
||||
res.status(200).json({ message: 'رمز عبور با موفقیت تغییر کرد' });
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
module.exports = {
|
||||
getUsers, getUserDetail, updateUser, verifyUser, rejectUser, updateUserStatus, changePass
|
||||
}
|
||||
Reference in New Issue
Block a user