# POST /v2/core/airlines/list

# Core Airlines List

این اندپوینت لیست خطوط هوایی را با قابلیت فیلترینگ پیشرفته، Pagination سفارشی و Pull اطلاعات کشور از Redis یا Database باز می‌گرداند. منطق Pagination به صورت DataTables‑Style انجام شده و ساختار پاسخ دقیقاً با نیازهای فرانت هماهنگ است.

<div class="api-docs" id="bkmrk-"></div>## Request Overview

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fcore%2Fairlin"><div class="endpoint-info"><div>**URL:** `/v2/core/airlines/list`</div><div>**Method:** <span class="method-post">POST</span></div><div>**Controller:** CoreController@airlinesList</div><div>**Middleware Stack:** authWithJwt → core</div></div></div>## Access Control

<div class="api-docs" id="bkmrk-jwt-%D9%85%D8%B9%D8%AA%D8%A8%D8%B1-%D8%B4%D8%B1%D8%B7-middle">- JWT معتبر
- شرط middleware core → `operator.branch == "[0]"`

</div>## Request Body

<div class="api-docs" id="bkmrk-field-type-required-"><table class="schema-table"><thead><tr><th>Field</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>json</td><td>string (JSON object)</td><td>yes</td><td>پارامترهای کامل DataTables شامل start, length, draw و فیلترهای advanced</td></tr><tr><td>lang.id</td><td>string|integer</td><td>optional</td><td>شناسه زبان انتخاب‌شده (در این روت استفاده‌ی عملی ندارد)</td></tr></tbody></table>

</div>### Structure Inside json

<div class="api-docs" id="bkmrk-field-type-descripti"><table class="schema-table"><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>start</td><td>integer</td><td>مقدار اولیه offset</td></tr><tr><td>length</td><td>integer</td><td>تعداد رکوردهای هر صفحه</td></tr><tr><td>draw</td><td>integer</td><td>شاخص درخواست DataTables</td></tr><tr><td>advanced.country</td><td>string</td><td>فیلتر بر اساس کشور</td></tr><tr><td>advanced.iata</td><td>string</td><td>فیلتر بر اساس IATA</td></tr><tr><td>advanced.icao</td><td>string</td><td>فیلتر بر اساس ICAO</td></tr><tr><td>advanced.r</td><td>string</td><td>فیلتر جستجو روی en\_title, fa\_title, description</td></tr></tbody></table>

</div>## Pagination Logic

<div class="api-docs" id="bkmrk-%D8%A7%DA%AF%D8%B1-start-%3D-0-%D8%A8%D8%A7%D8%B4%D8%AF-%E2%86%92">- اگر start = 0 باشد → start = length
- در غیر این صورت → start = start + length
- مقدار currentPage = start / length
- Query با paginate اجرا می‌شود

</div>## Filtering Logic

تمام فیلترها داخل یک Closure در where قرار گرفته‌اند:

<div class="api-docs" id="bkmrk-country-%E2%86%92-%D8%A7%DA%AF%D8%B1-%D9%85%D9%82%D8%AF%D8%A7%D8%B1-">- country → اگر مقدار خالی نباشد، where('country')
- iata → اگر مقدار خالی نباشد، where('iata')
- icao → اگر مقدار خالی نباشد، where('icao')
- r → applied on: 
    - en\_title LIKE %r%
    - fa\_title LIKE %r%
    - description LIKE %r%
- status = 1
- ORDER BY id DESC

</div>## Country Fetch Logic (Redis + DB Fallback)

<div class="api-docs" id="bkmrk-%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7-%D8%AA%D9%84%D8%A7%D8%B4-%D9%85%DB%8C%E2%80%8C%D8%B4%D9%88%D8%AF-co">- ابتدا تلاش می‌شود country از Redis با کلید `countries:{country_id}` خوانده شود.
- اگر Redis مقدار نداشت: 
    - query روی جدول countries (status=1, id, iso, fa\_name, en\_name, fa\_nationality, en\_nationality)
    - نتیجه در Redis ذخیره می‌شود
- country نهایی در خروجی فقط **fa\_name** است (در صورت نبود → همان country\_id)

</div>## Final Output Mapping

برای هر airline:

```
{
  "id": ...,
  "title": airline.en_title,
  "title_fa": airline.fa_title,
  "icao": airline.icao,
  "iata": airline.iata,
  "country": resolved_country_fa_name,
  "description": airline.description,
  "logo": airline.logo,
  "status": airline.status
}
  
```

<div class="api-docs" id="bkmrk--1"></div>## Response (Success)

```
{
  "status": true,
  "time": 1710000000,
  "draw": ,
  "recordsTotal": ,
  "recordsFiltered": ,
  "data": [...]
}
  
```

<div class="api-docs" id="bkmrk--2"></div>## Response (Error)

```
{
  "status": false,
  "code": "1003",
  "message": "(Exception message)",
  "trace": [...]
}
  
```

<div class="api-docs" id="bkmrk--3"></div>## Flowchart

<div class="api-docs" id="bkmrk-validate-jwt-%26-core-"><div class="flowchart"><div class="flow-item">Validate JWT &amp; Core Access</div><div class="flow-arrow">↓</div><div class="flow-item">Parse json → Data object</div><div class="flow-arrow">↓</div><div class="flow-item">Compute Pagination (start / length)</div><div class="flow-arrow">↓</div><div class="flow-item">Apply Filters (country, iata, icao, r)</div><div class="flow-arrow">↓</div><div class="flow-item">Query airlines with paginate</div><div class="flow-arrow">↓</div><div class="flow-item">For each airline → Fetch country (Redis → DB)</div><div class="flow-arrow">↓</div><div class="flow-item">Assemble Response Rows</div><div class="flow-arrow">↓</div><div class="flow-item">Return JSON with draw, recordsTotal, data</div></div></div>