feat: mask Iranian phone numbers in user-generated text fields

کاربران نتونن با گذاشتن شماره موبایل/تلفن توی بیو، کپشن پست/ریلز، توضیحاتِ
فروشگاه/کالا/پروژه/دوره/پروفایلِ آموزشگاه، بیرون از پلتفرم تماس بدن. یک
util مشترک (utils/phoneNumberMasking.js) شماره‌های ایرانی رو حتی وقتی
رقم‌ها با فاصله/خط‌فاصله/نقطه از هم جدا شده باشن تشخیص می‌ده و فقط همون
بخش رو با * جایگزین می‌کنه — بدون اینکه به قیمت/سایز/کد سفارش و بقیه‌ی
اعدادِ عادی دست بزنه. موقعِ ذخیره (نه نمایش) اعمال می‌شه، پس هیچ endpointِ
خوندنی نیاز به تغییر نداره.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
payacom
2026-09-15 15:54:26 +03:30
parent 5f99516078
commit 26979057d7
8 changed files with 102 additions and 14 deletions

View File

@@ -19,6 +19,7 @@ const { buildUnifiedInterestScore, blendFreshIntoRanked: blendInterestIntoRanked
const { resolveCommentModerationStatus } = require('../../../utils/contentModeration')
const { saveCommentWithModerationStatus } = require('../../../utils/commentStatusSave')
const { isVerifiedBadge } = require('../../../utils/verifyBadge')
const { maskPhoneNumbers } = require('../../../utils/phoneNumberMasking')
const {
coursePublicStatusFilter,
academyContentPublicStatusFilter,
@@ -232,7 +233,7 @@ const academyProfile = async (req, res, next) => {
academy.academy_image = `/profiles/${uniqueFileName}`
academy.academy_name = name
academy.sheba = `IR${shebaDigits}`
academy.bio = bio
academy.bio = maskPhoneNumbers(bio)
academy.tag = tag
await academy.save()
@@ -363,7 +364,7 @@ const creatCourse = async (req, res, next) => {
offer: offer || '0',
teacher_name,
academyId: academy._id,
caption,
caption: maskPhoneNumbers(caption),
course_time,
number_of_course_content,
is_free: isFreePackage,
@@ -460,7 +461,7 @@ const updateCourse = async (req, res, next) => {
if (cuorse_name !== undefined) course.cuorse_name = cuorse_name
if (category !== undefined) course.category = category
if (offer !== undefined) course.offer = offer || '0'
if (caption !== undefined) course.caption = caption
if (caption !== undefined) course.caption = maskPhoneNumbers(caption)
if (course_time !== undefined) course.course_time = course_time
if (number_of_course_content !== undefined) { course.number_of_course_content = number_of_course_content }
if (teacher_name !== undefined) course.teacher_name = teacher_name
@@ -5039,4 +5040,4 @@ module.exports = {
// دریافت دسته‌بندی‌های ویژه (برای نمایش در صفحه اصلی)
getFeatured
}
}