Skip to main content
#P1747

POST /v2/flights/routes/update

M. Update Airline Active Routes (Manual Trigger)

این اندپوینت برای بروزرسانی دستی جدول مسیرهای فعال (Airline Active Routes) استفاده می‌شود. سیستم با فراخوانی این سرویس، موجودی پروازها را برای ۷ روز آینده (از فردا) به تفکیک روزهای هفته بررسی کرده و در دیتابیس ذخیره می‌کند. این فرآیند با ارسال درخواست‌های متوالی به وب‌سرویس تامین‌کننده (Nira) انجام می‌شود.

Request Overview

URL: /v2/flights/routes/update
Method: POST
Controller: V2BaseController@updateAirlineActiveRoute
Logic Handler: CronController::updateAirlineActiveRoute
Middleware: authWithJwt

Access Control

  • نیاز به توکن احراز هویت (JWT) دارد.
  • این سرویس عملیات سنگینی است و مستقیماً با وب‌سرویس‌های خارجی درگیر می‌شود.

Request Body Parameters

Field Type Description
airline array/string (اختیاری) کد IATA ایرلاین‌ها. در صورت ارسال، بروزرسانی فقط برای این ایرلاین(ها) انجام می‌شود (مثلاً ['W5', 'NV']).
route_id integer (اختیاری) شناسه مسیر (ID) در جدول approved_flight_rate. اگر ارسال شود، پردازش فقط برای این مسیر خاص انجام می‌گیرد.

Logic Details

منطق پردازش در CronController بسیار پیچیده است و شامل مراحل زیر می‌باشد:

  1. پاکسازی وضعیت قبلی: کلید ردیس airline_active_route:cron:route_id در ابتدای کار حذف می‌شود تا پردازش از نو آغاز شود.
  2. واکشی مسیرها (Routes):
    • از جدول approved_flight_rate مسیرهایی که مبدا و مقصد غیرفارسی دارند انتخاب می‌شوند.
    • فیلتر بر اساس route_id (در صورت وجود در ورودی) اعمال می‌شود.
  3. واکشی ایرلاین‌ها:
    • از جدول application_interface رکوردهایی با تایپ api و سرویس nira که فعال هستند (status=1) دریافت می‌شوند.
    • اگر پارامتر airline ارسال شده باشد، لیست ایرلاین‌ها محدود می‌شود.
  4. حلقه پردازش (هفتگی):
    • برای ۷ روز آینده (شروع از فردا) یک بازه زمانی ایجاد می‌شود.
    • به ازای هر مسیر و هر روز، متد NiraApi->sendRequestFlight فراخوانی می‌شود.
    • اگر flight['Data']['Information'] حاوی داده باشد، وضعیت آن روز (مثلاً monday) برابر با 1 و در غیر این صورت 0 در نظر گرفته می‌شود.
  5. بروزرسانی دیتابیس (Upsert):
    • داده‌ها در جدول airline_active_route ذخیره می‌شوند.
    • سیستم بررسی می‌کند که آیا رکوردی با ترکیب (Airline + Origin + Destination) وجود دارد یا خیر (بدون توجه به جهت مسیر).
    • اگر موجود باشد Update و اگر نباشد Insert انجام می‌شود.
  6. محدودیت پردازش: یک شرط break وجود دارد: اگر تعداد ایرلاین‌های یافت شده بیش از ۱ مورد باشد، حلقه مسیرها (Routes) پس از اولین اجرا متوقف می‌شود (جهت جلوگیری از Timeout در پردازش‌های انبوه).

Response Structure

پاسخ موفق (200 OK)

{
    "payload": {
        "Status": true,
        "Time": 1733738500
    },
    "meta": {
        "timestamp": 1733738500
    }
}

Flowchart

Start Request (POST)
Redis::del(cron_key)
Fetch Routes (approved_flight_rate)
Fetch Airlines (Nira API configs)
Loop Routes
Loop Period (Next 7 Days)
1. Call NiraApi->sendRequestFlight
2. Check Availability (1 or 0)
3. Store in Memory ($checkedRoutes)
DB Check (airline_active_route)
↙ (Exists)
Update Row
↘ (New)
Insert Row
Count(Airlines) > 1 ?
Yes
Break Loop (Prevent Timeout)
↓ (No / Continue)
Return JSON Payload