Skip to main content
#P1806

GET /b2c/v1/discount/submit

Submit Discount Code

این اندپوینت برای بررسی و اعمال کد تخفیف‌های فعال هر branch (دفتر عامل) طراحی شده است. کد تخفیف فقط در صورتی قابل استفاده است که هنوز منقضی نشده باشد، محدودیت استفاده آن تمام نشده باشد و در صورت تعریف کاربر خاص، توسط همان کاربر ارسال شود.


Endpoint Info

URL: /b2c/v1/discount/submit
Method: GET
Controller: CreditDebitController@discountSubmit
Authorization: اختیاری (استفاده از JWT برای استخراج operator)
Related Table: payment_discount

Query Parameters

پارامتر نوع الزامی توضیح
branch integer شناسه دفتر (Branch ID)
type string نوع استفاده از تخفیف (مثلاً flight، hotel، train)
code string کد تخفیف واردشده توسط کاربر

Logic Flow

۱️⃣ کوئری روی جدول payment_discount
SELECT * 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 یک واحد کاهش می‌یابد.
✅ بازگرداندن پاسخ موفق با داده‌های تخفیف:
  • id
  • title
  • type (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 در اختیاری‌ترین حالت.