#P1657
POST /v2/core/airlines/list
Core Airlines List
این اندپوینت لیست خطوط هوایی را با قابلیت فیلترینگ پیشرفته، Pagination سفارشی و Pull اطلاعات کشور از Redis یا Database باز میگرداند. منطق Pagination به صورت DataTables‑Style انجام شده و ساختار پاسخ دقیقاً با نیازهای فرانت هماهنگ است.
Request Overview
URL:
/v2/core/airlines/listMethod: POST
Controller: CoreController@airlinesList
Middleware Stack: authWithJwt → core
Access Control
- JWT معتبر
- شرط middleware core →
operator.branch == "[0]"
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| json | string (JSON object) | yes | پارامترهای کامل DataTables شامل start, length, draw و فیلترهای advanced |
| lang.id | string|integer | optional | شناسه زبان انتخابشده (در این روت استفادهی عملی ندارد) |
Structure Inside json
| Field | Type | Description |
|---|---|---|
| start | integer | مقدار اولیه offset |
| length | integer | تعداد رکوردهای هر صفحه |
| draw | integer | شاخص درخواست DataTables |
| advanced.country | string | فیلتر بر اساس کشور |
| advanced.iata | string | فیلتر بر اساس IATA |
| advanced.icao | string | فیلتر بر اساس ICAO |
| advanced.r | string | فیلتر جستجو روی en_title, fa_title, description |
Pagination Logic
- اگر start = 0 باشد → start = length
- در غیر این صورت → start = start + length
- مقدار currentPage = start / length
- Query با paginate اجرا میشود
Filtering Logic
تمام فیلترها داخل یک Closure در where قرار گرفتهاند:
- 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
Country Fetch Logic (Redis + DB Fallback)
- ابتدا تلاش میشود 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)
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
}
Response (Success)
{
"status": true,
"time": 1710000000,
"draw": ,
"recordsTotal": ,
"recordsFiltered": ,
"data": [...]
}
Response (Error)
{
"status": false,
"code": "1003",
"message": "(Exception message)",
"trace": [...]
}
Flowchart
Validate JWT & Core Access
↓
Parse json → Data object
↓
Compute Pagination (start / length)
↓
Apply Filters (country, iata, icao, r)
↓
Query airlines with paginate
↓
For each airline → Fetch country (Redis → DB)
↓
Assemble Response Rows
↓
Return JSON with draw, recordsTotal, data