Skip to main content
#P1442

POST /api/v2/passenger/store

Route Info

Method Endpoint Controller Middleware Purpose
POST /api/v2/passenger/store UserController@storePassenger authWithJwt ایجاد یا بروزرسانی رکوردهای مشتری (مسافر) بر اساس ملیت و مدارک.

منطق عملکرد

  • برای هر آیتم در request->data بررسی می‌شود:
    • اگر ملیت = ایران و کد ملی موجود → جستجو بر اساس national_code.
    • اگر ملیت ≠ ایران → جستجو بر اساس passport_code.
  • اگر رکورد موجود نباشد → درج جدید در customers و برگرداندن شناسه.
  • اگر موجود باشد → در صورت فعال بودن احراز هویت، فیلدهای معتبر (دارای rank >=90) حذف و اطلاعات دیگر بروز می‌شوند.
  • در پایان لاگ SystemLog(type=StorePassenger) در صف تأخیر ثبت می‌شود.

پارامترهای ورودی کلیدی

نام نوع ضروری توضیح
branch integer بله شناسه شعبه.
data[] array بله آرایه‌ای از مسافران جهت درج.
data[].citizenship.id integer بله شناسه کشور.
data[].national_code string خیر کد ملی (در صورت ایرانی بودن).
data[].pass_code string خیر کد پاسپورت (در صورت خارجی بودن).
data[].birthday string بله تاریخ تولد (YYYY-MM-DD).
operator object بله از JWT برای ثبت مسئول.

نمونه خروجی موفق

{
  "status": true,
  "time": 1732038300,
  "data": [
     {"passenger_id": 45, "name_fa": "علیرضا", "lastname_fa": "ایرانپور"}
  ]
}

امنیت

JWT اجباری؛ هر اپراتور فقط به شعبه خود اجازه درج دارد.

وابستگی‌ها

  • DB
  • Carbon
  • Functions::checkDatetime()
  • Validator::datetime()
  • SystemLog

کارایی

درج مستقیم بدون تراکنش پیچیده، متوسط 2–3ms برای هر مسافر.

مدیریت خطا

  • اگر رکورد تکراری → پاسخ با status=false و پیام خطا.
  • اگر احراز هویت معتبر فعال باشد → جلوگیری از ویرایش فیلدهای حساس.

اثرات جانبی

در صورت وجود کش هویت، برخی فیلدها حذف از بروزرسانی خواهند شد.

ردپای حسابرسی

ثبت log با نوع StorePassenger در صف snailJob با تأخیر ۱۰ دقیقه.

پیشنهاد بهبود

  • اضافه کردن check برای تداخل کد ملی و پاسپورت در شعب مختلف.
  • تبدیل عملیات دسته‌ای به تراکنش DB برای اتمیک بودن.

جمع‌بندی

این متد پایه‌ی درج و بروزرسانی اولیه داده‌های مسافران در سیستم فروش و رزرو است و احراز هویت را به طور هوشمند کنترل می‌کند.