# GET /api/v2/passenger/profile

<div id="bkmrk-" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"></div>### Route Info

<div id="bkmrk-method-endpoint-cont" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"><table border="1" style="width: 96%; margin: auto; border-collapse: collapse; text-align: center;"><tbody><tr style="background: #f7f7f7; font-weight: bold;"><td>Method</td><td>Endpoint</td><td>Controller</td><td>Middleware</td><td>Purpose</td></tr><tr><td style="direction: ltr;">GET</td><td style="direction: ltr;">/api/v2/passenger/profile</td><td style="direction: ltr;">UserController@profilePassenger</td><td style="direction: ltr;">authWithJwt</td><td style="direction: rtl; text-align: right;">بازیابی پروفایل کامل مسافر شامل اطلاعات هویتی، مدارک، ملیت، تاریخ تولد، و سوابق مالی.</td></tr></tbody></table>

</div>### منطق عملکرد

<div id="bkmrk-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D8%AF%D8%B1-%D8%AC%D8%AF%D9%88%D9%84-custom" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;">- جستجو در جدول `customers` بر اساس شناسه ورودی `id`.
- در صورت عدم وجود، پاسخ با کد ۴۰۴ و پیام "مسافری با این مشخصات یافت نشد" برمی‌گردد.
- در صورت وجود، تلاش برای واکشی ملیت از Redis (کلید `countries:{id}`).
- اگر کشور در Redis نبود، از DB خوانده و کش می‌شود.
- واکشی فاکتورهای مالی مرتبط از `factor_items + factors` با شاخه فعلی، گروه‌بندی‌شده بر اساس `factor_id`.
- در نهایت خروجی شامل بخش‌های `references`، `details`، `contacts` و `correspondence` بازگردانده می‌شود.

</div>### پارامترهای ورودی

<div id="bkmrk-%D9%86%D8%A7%D9%85-%D9%86%D9%88%D8%B9-%D8%B6%D8%B1%D9%88%D8%B1%DB%8C-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"><table border="1" style="width: 95%; margin: auto; border-collapse: collapse; text-align: center;"><tbody><tr style="background: #f7f7f7; font-weight: bold;"><td>نام</td><td>نوع</td><td>ضروری</td><td>توضیح</td></tr><tr><td>id</td><td>integer</td><td>بله</td><td>شناسه مسافر در جدول customers.</td></tr><tr><td>branch</td><td>integer</td><td>بله</td><td>شناسه شعبه موردنظر برای فیلترینگ فاکتورها.</td></tr></tbody></table>

</div>### نمونه خروجی موفق

```
{
  "payload": {
    "references": [
      {"title": "بلیط استانبول", "financial": {...}}
    ],
    "contacts": false,
    "details": {
      "passenger_id": 44,
      "name_fa": "علیرضا",
      "lastname_fa": "ایرانپور",
      "national_code": "0012345678",
      "birthday": "1386/03/21",
      "citizenship": { "fa_name": "ایران", "iso": "IR" },
      "sex": true,
      "national_image": false,
      "identity": false
    }
  },
  "meta": { "timestamp": 1732038300 }
}
```

<div id="bkmrk--1" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"></div>### امنیت

احراز هویت با JWT. دسترسی فقط برای اپراتورهای شعبه فعال مجاز است.

<div id="bkmrk--2" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"></div>### وابستگی‌ها

<div id="bkmrk-db-facade-redis-carb" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;">- DB Facade
- Redis
- Carbon
- TradeController::financial()
- Functions::int2DateTime()

</div>### کارایی

کش Redis برای کشورها سرعت پاسخ را تا ۸۰٪ افزایش می‌دهد؛ متوسط زمان پاسخ: 3–5ms.

<div class="align-right" id="bkmrk--3" style="font-family: Vazir; line-height: 1.9;"></div>### مدیریت خطا

<div class="align-right" id="bkmrk-%D8%AF%D8%B1-%D8%B5%D9%88%D8%B1%D8%AA-%D8%AD%D8%B0%D9%81-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF%D8%8C-%D8%A8" style="font-family: Vazir; line-height: 1.9;">- در صورت حذف رکورد، بازگرداندن JSON با کد 404 و پیام مناسب.

</div>### اثرات جانبی

هیچ دیتایی تغییر نمی‌کند؛ فقط خوانش ایمن انجام می‌شود.

<div class="align-right" id="bkmrk--4" style="font-family: Vazir; line-height: 1.9;"></div>### ردپای حسابرسی

در این نسخه لاگ مستقیم ندارد؛ اکشن فقط خواندن است.

<div id="bkmrk--5" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"></div>### پیشنهاد بهبود

<div id="bkmrk-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%D8%AC%D8%B2%D8%A6%DB%8C%D8%A7%D8%AA-%D8%AA%D9%85%D8%A7%D8%B3-%D8%A7" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;">- افزودن جزئیات تماس اخیر از جدول `call_logs`.
- نمایش وضعیت تأیید احراز هویت در خروجی.

</div>### جمع‌بندی

پروفایل مسافر ماژول مرجع برای نمایش داده‌های مسافر است؛ شامل جزئیات هویتی، ملیتی، مدارک، و سوابق مالی است.

<div id="bkmrk-passenger-profile" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"></div>