#P1747
POST /v2/flights/routes/update
M. Update Airline Active Routes (Manual Trigger)
این اندپوینت برای بروزرسانی دستی جدول مسیرهای فعال (Airline Active Routes) استفاده میشود. سیستم با فراخوانی این سرویس، موجودی پروازها را برای ۷ روز آینده (از فردا) به تفکیک روزهای هفته بررسی کرده و در دیتابیس ذخیره میکند. این فرآیند با ارسال درخواستهای متوالی به وبسرویس تامینکننده (Nira) انجام میشود.
Request Overview
URL:
/v2/flights/routes/updateMethod: 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 بسیار پیچیده است و شامل مراحل زیر میباشد:
- پاکسازی وضعیت قبلی: کلید ردیس
airline_active_route:cron:route_idدر ابتدای کار حذف میشود تا پردازش از نو آغاز شود. - واکشی مسیرها (Routes):
- از جدول
approved_flight_rateمسیرهایی که مبدا و مقصد غیرفارسی دارند انتخاب میشوند. - فیلتر بر اساس
route_id(در صورت وجود در ورودی) اعمال میشود.
- از جدول
- واکشی ایرلاینها:
- از جدول
application_interfaceرکوردهایی با تایپapiو سرویسniraکه فعال هستند (status=1) دریافت میشوند. - اگر پارامتر
airlineارسال شده باشد، لیست ایرلاینها محدود میشود.
- از جدول
- حلقه پردازش (هفتگی):
- برای ۷ روز آینده (شروع از فردا) یک بازه زمانی ایجاد میشود.
- به ازای هر مسیر و هر روز، متد
NiraApi->sendRequestFlightفراخوانی میشود. - اگر
flight['Data']['Information']حاوی داده باشد، وضعیت آن روز (مثلاًmonday) برابر با 1 و در غیر این صورت 0 در نظر گرفته میشود.
- بروزرسانی دیتابیس (Upsert):
- دادهها در جدول
airline_active_routeذخیره میشوند. - سیستم بررسی میکند که آیا رکوردی با ترکیب (Airline + Origin + Destination) وجود دارد یا خیر (بدون توجه به جهت مسیر).
- اگر موجود باشد Update و اگر نباشد Insert انجام میشود.
- دادهها در جدول
- محدودیت پردازش: یک شرط
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)
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