# Route: POST /api/v2/online/search/{type}

## 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: #efefef; font-weight: bold;"><td>Method</td><td>Endpoint</td><td>Controller</td><td>Middleware</td><td>Purpose</td></tr><tr><td>POST</td><td style="direction: ltr;">/api/v2/online/search/{type}</td><td style="direction: ltr;">OnlineController@routeSearch</td><td style="direction: ltr;">authWithJwt</td><td>جستجوی مسیر رفت و برگشت بر اساس IATA یا ID شهر</td></tr></tbody></table>

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

<div id="bkmrk-%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%B3%D9%86%D8%AC%DB%8C%E2%80%AF%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%E2%80%8C%D9%87%D8%A7%DB%8C" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;">- اعتبارسنجی تاریخ‌های `departure` و `returning` با `Validator::datetime()`
- فراخوانی `BaseService::combineRoute(branch, type, ...)` برای دریافت پروازها.
- واکشی اطلاعات مبدا/مقصد از Redis (کلید تکی مثل `airports:IATA`).
- در صورت ناکامی در Redis → دریافت از DB به همراه کش مجدد.
- تجمیع داده در `tempSearch` و بازگردانی به کلاینت.

</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: 94%; margin: auto; border-collapse: collapse; text-align: center;"><tbody><tr style="background: #fafafa; font-weight: bold;"><td>نام</td><td>نوع</td><td>ضروری</td><td>توضیح</td></tr><tr><td>type</td><td>string</td><td>بله</td><td>flight | train</td></tr><tr><td>branch</td><td>integer</td><td>بله</td><td>شناسه شعبه</td></tr><tr><td>origin</td><td>string | int</td><td>بله</td><td>کد IATA یا شناسه شهر مبدأ</td></tr><tr><td>destination</td><td>string | int</td><td>بله</td><td>کد IATA یا شناسه شهر مقصد</td></tr><tr><td>departure</td><td>datetime</td><td>بله</td><td>تاریخ حرکت</td></tr><tr><td>returning</td><td>datetime | null</td><td>خیر</td><td>تاریخ بازگشت، اختیاری</td></tr></tbody></table>

</div>### پاسخ موفق نمونه

```
{
 "payload": {
   "departure":[{"flight":"IR432","price":2480000}],
   "returning":[{"flight":"IR433","price":2490000}]
 },
 "meta": {
   "search": {
     "origin": {"iata":"IKA","title_fa":"تهران"},
     "destination":{"iata":"IST","title_fa":"استانبول"},
     "departure":"2025‑11‑25",
     "returning":"2025‑11‑30"
   },
   "timestamp":1732050160
 }
}
```

### پاسخ خطا

```
{
 "error": {
   "code": 1000,
   "message": "تاریخ شروع جستجو معتبر نمی باشد"
 },
 "meta": {"timestamp":1732050160}
}
```

### وابستگی‌ها

<div class="align-right" id="bkmrk-baseservice%3A%3Acombine" style="direction: rtl; font-family: Vazir; line-height: 1.9;">- `BaseService::combineRoute()`
- `Redis` → کش فرودگاه‌ها
- `DB` → جداول `airports`, `countries`, `states`, `cities`

</div>### بهبود پیشنهادی

<div id="bkmrk-online-route-search" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;">- افزودن پشتیبانی از نوع `bus`
- پویش همزمان در providers ( پارالل requests )

</div>