Skip to main content
#P1657

POST /v2/core/airlines/list

Core Airlines List

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

Request Overview

URL: /v2/core/airlines/list
Method: 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