full app
This commit is contained in:
@@ -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),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user