This commit is contained in:
payacom
2026-10-06 17:08:44 +03:30
parent fade8543e2
commit 367416d419
14 changed files with 6087 additions and 5937 deletions

View File

@@ -53,8 +53,14 @@ const getOfferTypes = async (req, res, next) => {
]
}
const canFree =
(user.monthly_free_offer || 0) > 0 && canUseFreeCreation(user)
// رایگان بودن درخواست به «گیرنده» بستگی دارد: اگر گیرنده «دریافت هدیه» را غیرفعال
// کرده باشه، فرستنده (با سهمیه‌ی رایگانِ خودش) می‌تونه درخواست رایگان بده
const receiverForFree = req.query.userId
? await UserModel.findById(req.query.userId).select('gift_enabled offer_payment_enabled').lean()
: null
// رایگان وقتی فعاله که گیرنده «دریافت هدیه» یا «دریافت پرداختی از چت» رو غیرفعال کرده باشه
const freeEligible = receiverForFree?.gift_enabled === false || receiverForFree?.offer_payment_enabled === false
const canFree = freeEligible && canUseFreeCreation(user)
// رایگان را حذف نکن — اگر مجاز نیست، با فلگ disabled برگردان تا UI نشان دهد
offerTypes = offerTypes.map((t) => {
@@ -63,8 +69,8 @@ const getOfferTypes = async (req, res, next) => {
plain.disabled = !canFree
plain.unavailableReason = canFree
? null
: (user.monthly_free_offer || 0) <= 0
? 'سهمیه رایگان ماهانه شما تمام شده است'
: !freeEligible
? 'برای درخواست رایگان، دریافت هدیه از چت را در تنظیمات حساب غیرفعال کنید'
: 'سقف ثبت رایگان شما به پایان رسیده است'
}
return plain
@@ -206,19 +212,15 @@ const handleSuccessfulOfferPayment = async (req, res) => {
// اگر گیرنده «دریافت پرداختی از چت» رو غیرفعال کرده باشه، درخواست همکاری براش
// همیشه رایگانه — مستقل از سهمیه‌ی رایگان ماهانه‌ی فرستنده
const receiverOffersFree = reciverUser?.offer_payment_enabled === false
const receiverFreeEligible = reciverUser?.gift_enabled === false || reciverUser?.offer_payment_enabled === false
let price
if (receiverOffersFree) {
price = 0
} else if (user.monthly_free_offer > 0 && offerType === 'free' && canUseFreeCreation(user)) {
if (offerType === 'free' && receiverFreeEligible && canUseFreeCreation(user)) {
const consumed = await consumeFreeCreation(user)
if (!consumed.ok) {
return res.status(403).json(freeCreationLimitResponse())
}
price = 0
user.monthly_free_offer -= 1
await user.save()
} else if (offerType === 'free') {
return res.status(403).json({
error: true,