# GET /b2c/v1/passengers/previous

## List Previous Passengers

این اندپوینت جهت واکشی لیست مسافرانی که پیش‌تر در رزروهای کاربر (یا همکار) شرکت داشته‌اند طراحی شده است. اطلاعات از جدول `customers` واکشی شده و شامل جزئیات هویتی، ملیتی، گذرنامه و تماس فرد می‌باشد.

<div class="api-docs" id="bkmrk-"><div class="endpoint-section">  
</div>---

</div>### Endpoint Info

<div class="api-docs" id="bkmrk-url%3A-%2Fb2c%2Fv1%2Fpasseng"><div class="endpoint-info"><div>**URL:** `/b2c/v1/passengers/previous`</div><div>**Method:** <span class="method-get">GET</span></div><div>**Controller:** `PassengersController@indexPassengersPrevious`</div><div>**Auth:** JWT Required (`middleware: authWithJwt`)</div></div>---

</div>### Query Parameters (from JWT + Request)

<div class="api-docs" id="bkmrk-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D9%86%D9%88%D8%B9-%D8%A7%D8%AC%D8%A8%D8%A7%D8%B1%DB%8C-%D8%AA"><table class="schema-table" dir="rtl"><thead><tr><th>پارامتر</th><th>نوع</th><th>اجباری</th><th>توضیح</th></tr></thead><tbody><tr><td>operator.id</td><td>integer</td><td>✅</td><td>شناسه اپراتور / مسافر اصلی (از JWT)</td></tr><tr><td>group</td><td>string</td><td>✅</td><td>نوع گروه کاربری فعال. مقادیر مجاز: `b2c`، `b2b`، `colleague`.</td></tr></tbody></table>

---

</div>### Logic Flow

<div class="api-docs" id="bkmrk-%F0%9F%93%A5-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%D8%A7%D9%BE%D8%B1%D8%A7%D8%AA"><div class="flowchart" dir="rtl"><div class="flow-item">📥 دریافت شناسه اپراتور از JWT → `$passengerId = $request->get('operator')->id`</div><div class="flow-arrow">↓</div><div class="flow-item-check">بررسی وجود `passengerId`. اگر نباشد، پاسخ خطای 400 با پیام **Passenger ID is required** و `code = passenger_id_required`.</div><div class="flow-arrow">↓</div><div class="flow-item-process">**۱. واکشی مسافران قبلی:**  
- اگر گروه کاربری `b2b` یا `colleague` باشد: 
    - از جدول `factors` رکوردهایی که `colleague_auth = operator.id` دارند و وضعیتشان خارج از \[2,5\] است استخراج می‌شود.
    - مقادیر فیلد `customer` از آن‌ها گرفته و از جدول `customers` واکشی می‌شود.
- اگر گروه کاربری `b2c` باشد: در جدول `customers` رکوردهایی که `relationship = passengerId` هستند واکشی می‌شوند.

سپس برای اطمینان، خود کاربر نیز با شرط `orWhere('id', passengerId)` به نتایج افزوده می‌شود.</div><div class="flow-arrow">↓</div><div class="flow-item-process">**۲. تبدیل داده‌ها:**  
برای هر مسافر: - در صورت نبود ملیت، `citizenship = 118` (ایران) تنظیم می‌شود.
- دادهٔ کشور از جدول `countries` فیلتر می‌شود با `status=1` و `fa_nationality IS NOT NULL`.
- تارگت خروجی شامل ساختارهای استاندارد برای **fullname**، **identity**، **passport**، **mobile**، **birth** و ... است.

</div><div class="flow-arrow">↓</div><div class="flow-item-success">✅ خروجی نهایی: `{"items": [...], "meta": {"timestamp": time()}}`</div></div>---

</div>### Response Samples

#### ✅ موفق - لیست مسافران قبلی

```json
{
  "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 خالی

```json
{
  "error": {
    "message": "Passenger ID is required",
    "code": "passenger_id_required"
  },
  "meta": { "timestamp": 1733752715 }
}
```

<div class="api-docs" id="bkmrk--1">---

</div>### Technical Notes

<div class="api-docs" id="bkmrk-%D9%85%D9%86%D8%A8%D8%B9-%D8%A7%D8%B5%D9%84%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87%3A-%D8%AC%D8%AF%D9%88%D9%84">- منبع اصلی داده: جدول `customers`، با ارتباط ضمنی از فیلد `relationship` به شناسهٔ اپراتور.
- در حالت B2B/Colleague، ارتباط با فیلد `colleague_auth` از جدول `factors` برقرار می‌شود.
- ملیت‌ها از جدول `countries` بر اساس وضعیت فعال (status=1) و فیلدهای `fa_nationality`/`en_nationality` استخراج می‌شوند.
- فرایند map در انتها داده‌ها را از آبجکت DB به قالب JSON با فرمت Front‑Friendly تبدیل می‌کند.
- در همه پاسخ‌ها کلید `meta.timestamp` جهت تطبیق زمانی اضافه می‌شود.

</div>