This commit is contained in:
payacom
2026-09-24 21:03:27 +03:30
parent 7f0ddfde70
commit 806471241e
43 changed files with 2166 additions and 144 deletions

View File

@@ -153,35 +153,55 @@ const getAccountStatus = async (req, res) => {
const updatePrivacySettings = async (req, res) => {
try {
const user = await UserModel.findById(req.user._id)
// auth فقط توکن را چک می‌کند؛ blockCheck باید req.user را ست کرده باشد
const userId = req.user?._id || getUserIdFromToken(req)
if (!userId) {
return res.status(401).json({ message: 'Unauthorized' })
}
const $set = {}
if (typeof req.body.allow_save_posts === 'boolean') {
$set.allow_save_posts = req.body.allow_save_posts
}
if (typeof req.body.ghost_mode === 'boolean') {
$set.ghost_mode = req.body.ghost_mode
}
if (typeof req.body.show_location === 'boolean') {
$set.show_location = req.body.show_location
}
if (typeof req.body.post_location_enabled === 'boolean') {
$set.post_location_enabled = req.body.post_location_enabled
}
if (typeof req.body.is_private === 'boolean') {
$set.is_private = req.body.is_private
}
if (typeof req.body.gift_enabled === 'boolean') {
$set.gift_enabled = req.body.gift_enabled
}
if (typeof req.body.offer_payment_enabled === 'boolean') {
$set.offer_payment_enabled = req.body.offer_payment_enabled
}
if (APP_LANGUAGE_CODES.includes(req.body.preferred_language)) {
$set.preferred_language = req.body.preferred_language
}
// فقط فیلدهای privacy را با $set آپدیت می‌کنیم تا validation کل سند
// (فیلدهای قدیمی/ناسازگار) باعث 500 نشود
const user = await UserModel.findByIdAndUpdate(
userId,
Object.keys($set).length ? { $set } : {},
{
new: true,
runValidators: false,
select:
'allow_save_posts ghost_mode show_location post_location_enabled is_private gift_enabled offer_payment_enabled preferred_language',
}
).lean()
if (!user) {
return res.status(404).json({ message: 'کاربر یافت نشد' })
}
if (typeof req.body.allow_save_posts === 'boolean') {
user.allow_save_posts = req.body.allow_save_posts
}
if (typeof req.body.ghost_mode === 'boolean') {
user.ghost_mode = req.body.ghost_mode
}
if (typeof req.body.show_location === 'boolean') {
user.show_location = req.body.show_location
}
if (typeof req.body.post_location_enabled === 'boolean') {
user.post_location_enabled = req.body.post_location_enabled
}
if (typeof req.body.is_private === 'boolean') {
user.is_private = req.body.is_private
}
if (typeof req.body.gift_enabled === 'boolean') {
user.gift_enabled = req.body.gift_enabled
}
if (typeof req.body.offer_payment_enabled === 'boolean') {
user.offer_payment_enabled = req.body.offer_payment_enabled
}
if (APP_LANGUAGE_CODES.includes(req.body.preferred_language)) {
user.preferred_language = req.body.preferred_language
}
await user.save()
return res.status(200).json({
allow_save_posts: user.allow_save_posts !== false,
ghost_mode: Boolean(user.ghost_mode),
@@ -193,7 +213,11 @@ const updatePrivacySettings = async (req, res) => {
preferred_language: user.preferred_language || 'fa',
})
} catch (err) {
return res.status(500).json({ message: 'خطا در ذخیره تنظیمات' })
console.error('updatePrivacySettings:', err)
return res.status(500).json({
message: 'خطا در ذخیره تنظیمات',
detail: err?.message || String(err),
})
}
}