#P1806
GET /b2c/v1/discount/submit
Submit Discount Code
این اندپوینت برای بررسی و اعمال کد تخفیفهای فعال هر branch (دفتر عامل) طراحی شده است. کد تخفیف فقط در صورتی قابل استفاده است که هنوز منقضی نشده باشد، محدودیت استفاده آن تمام نشده باشد و در صورت تعریف کاربر خاص، توسط همان کاربر ارسال شود.
Endpoint Info
URL:
/b2c/v1/discount/submitMethod: GET
Controller:
CreditDebitController@discountSubmitAuthorization: اختیاری (استفاده از JWT برای استخراج
operator)Related Table:
payment_discountQuery Parameters
| پارامتر | نوع | الزامی | توضیح |
|---|---|---|---|
| branch | integer | ✅ | شناسه دفتر (Branch ID) |
| type | string | ✅ | نوع استفاده از تخفیف (مثلاً flight، hotel، train) |
| code | string | ✅ | کد تخفیف واردشده توسط کاربر |
Logic Flow
۱️⃣ کوئری روی جدول
payment_discountSELECT * FROM payment_discount
WHERE branch = :branch
AND status = 1
AND type = :type
AND code = LOWER(:code)
LIMIT 1;
↓
آیا رکورد یافت شد؟
- ✅ بله → ادامه
- ❌ خیر → پیام خطای «کد تخفیف معتبر نمیباشد»
↓
آیا محدودیت استفاده (`limit`) دارد؟
- اگر null → بدون محدودیت
- اگر >0 → قابل استفاده
- اگر 0 → پیام خطای «کد تخفیف تمام شده است»
↓
آیا تخفیف برای کاربر خاص تعریف شده؟
- اگر user=null → برای همه مجاز
- اگر user=id اپراتور → مجاز
- در غیر این صورت → «کد تخفیف برای کاربر دیگری میباشد»
↓
بررسی انقضا (
expiration)
- اگر null → همیشه معتبر
- اگر زمان فعلی < expiration → معتبر
- در غیر این صورت → «کد تخفیف منقضی شده است»
↓
🔄 اگر limit برابر 1 → بروزرسانی رکورد:
status = 3, limit = 0
در غیر این صورت فقط عدد limit یک واحد کاهش مییابد.
↓
✅ بازگرداندن پاسخ موفق با دادههای تخفیف:
idtitletype(discount_type در DB)value(discount_value در DB)
Response Samples
✅ تخفیف معتبر
{
"status": true,
"time": 1733756000,
"data": {
"id": 47,
"title": "تخفیف ویژه پرواز نوروزی",
"type": "percent",
"value": 10
}
}
❌ کد تخفیف منقضی شده
{
"status": false,
"time": 1733756005,
"message": "کد تخفیف وارد شده منقضی شده است."
}
❌ کد تخفیف برای کاربر دیگری است
{
"status": false,
"time": 1733756010,
"message": "کد تخفیف وارد شده برای کاربر دیگری می باشد."
}
❌ کد تخفیف پیدا نشد
{
"status": false,
"time": 1733756020,
"message": "کد تخفیف وارد شده معتبر نمی باشد."
}
Technical Notes
- جدول مورد استفاده:
payment_discountفیلدهای کلیدی:id,title,type,discount_type,discount_value,branch,user,limit,status,expiration. - در صورت
status = 3تخفیف عملاً غیرفعال محسوب میشود. - کیس‑اِنسنسیتیو بودن بررسی کد با
strtolower($request->code). - مدیریت TTL (انقضا) و محدودیت استفاده در همان جدول انجام میشود؛ نیازی به Redis نیست.
- پاسخها ساختاری ساده و سازگار با سایر اندپوینتهای B2C دارند: کلیدهای مشترک
status،timeوmessageدر اختیاریترین حالت.