GET /b2c/v1/passengers/previous List Previous Passengers این اندپوینت جهت واکشی لیست مسافرانی که پیش‌تر در رزروهای کاربر (یا همکار) شرکت داشته‌اند طراحی شده است. اطلاعات از جدول customers واکشی شده و شامل جزئیات هویتی، ملیتی، گذرنامه و تماس فرد می‌باشد. Endpoint Info URL: /b2c/v1/passengers/previous Method: GET Controller: PassengersController@indexPassengersPrevious Auth: JWT Required ( middleware: authWithJwt ) Query Parameters (from JWT + Request) پارامتر نوع اجباری توضیح operator.id integer ✅ شناسه اپراتور / مسافر اصلی (از JWT) group string ✅ نوع گروه کاربری فعال. مقادیر مجاز: b2c ، b2b ، colleague . Logic Flow 📥 دریافت شناسه اپراتور از JWT → $passengerId = $request->get('operator')->id ↓ بررسی وجود passengerId . اگر نباشد، پاسخ خطای 400 با پیام Passenger ID is required و code = passenger_id_required . ↓ ۱. واکشی مسافران قبلی: اگر گروه کاربری b2b یا colleague باشد: از جدول factors رکوردهایی که colleague_auth = operator.id دارند و وضعیتشان خارج از [2,5] است استخراج می‌شود. مقادیر فیلد customer از آن‌ها گرفته و از جدول customers واکشی می‌شود. اگر گروه کاربری b2c باشد: در جدول customers رکوردهایی که relationship = passengerId هستند واکشی می‌شوند. سپس برای اطمینان، خود کاربر نیز با شرط orWhere('id', passengerId) به نتایج افزوده می‌شود. ↓ ۲. تبدیل داده‌ها: برای هر مسافر: در صورت نبود ملیت، citizenship = 118 (ایران) تنظیم می‌شود. دادهٔ کشور از جدول countries فیلتر می‌شود با status=1 و fa_nationality IS NOT NULL . تارگت خروجی شامل ساختارهای استاندارد برای fullname ، identity ، passport ، mobile ، birth و ... است. ↓ ✅ خروجی نهایی: {"items": [...], "meta": {"timestamp": time()}} Response Samples ✅ موفق - لیست مسافران قبلی { "items": [ { "id": 1547, "gender": 1, "fullname": { "first_name": { "fa": "علیرضا", "en": "Alireza" }, "last_name": { "fa": "رضایی", "en": "Rezaei" } }, "email": "alireza@example.com", "mobile": "09123456789", "birth": "13721021", "identity": { "id": "1234567890", "nationality": { "id": 118, "iso": "IR", "title": { "fa": "ایران", "en": "Iran" }, "nationality": { "fa": "ایرانی", "en": "Iranian" } } }, "passport": { "id": "P98651234", "expire_at": "20270930" } } ], "meta": { "timestamp": 1733752711 } } ❌ خطا – Passenger ID خالی { "error": { "message": "Passenger ID is required", "code": "passenger_id_required" }, "meta": { "timestamp": 1733752715 } } Technical Notes منبع اصلی داده: جدول customers ، با ارتباط ضمنی از فیلد relationship به شناسهٔ اپراتور. در حالت B2B/Colleague، ارتباط با فیلد colleague_auth از جدول factors برقرار می‌شود. ملیت‌ها از جدول countries بر اساس وضعیت فعال (status=1) و فیلدهای fa_nationality / en_nationality استخراج می‌شوند. فرایند map در انتها داده‌ها را از آبجکت DB به قالب JSON با فرمت Front‑Friendly تبدیل می‌کند. در همه پاسخ‌ها کلید meta.timestamp جهت تطبیق زمانی اضافه می‌شود.