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