# GET /v2/charter/flight-rate

# Charter: Get Approved Flight Rate

این اندپوینت نرخ مصوب (Approved Flight Rate) میان دو فرودگاه را بر اساس جدول `approved_flight_rate` بازیابی می‌کند. سیستم ابتدا دقیقاً مسیر **origin → destination** را جستجو می‌کند و در صورت نبود، مسیر **destination → origin** را نیز بررسی می‌کند. در صورت نیافتن رکورد، خروجی با مقدارهای پیش‌فرض (0) برگردانده می‌شود.

<div class="api-docs" id="bkmrk-"></div>## Request Overview

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fcharter%2Ffli"><div class="endpoint-info"><div>**URL:** `/v2/charter/flight-rate`</div><div>**Method:** <span class="method-get">GET</span></div><div>**Controller:** CharterController@getApprovedFlightRate</div><div>**Middleware:** authWithJwt</div></div></div>## Access Control

<div class="api-docs" id="bkmrk-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D9%81%D9%82%D8%B7-%D8%A8%D8%A7-jwt-%D9%85%D8%B9">- دسترسی فقط با JWT معتبر
- هیچ شرط branch، نقش یا core middleware وجود ندارد
- ورودی‌ها مستقیماً از Query Params خوانده می‌شوند

</div>## Query Parameters

<div class="api-docs" id="bkmrk-parameter-type-requi"><table class="schema-table"><thead><tr><th>Parameter</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>origin</td><td>integer</td><td>yes</td><td>ID فرودگاه مبدا</td></tr><tr><td>destination</td><td>integer</td><td>yes</td><td>ID فرودگاه مقصد</td></tr></tbody></table>

</div>## Database Table Reference

اطلاعات نرخ‌های مصوب از جدول زیر خوانده می‌شود:

<div class="api-docs" id="bkmrk-column-type-descript"><table class="schema-table"><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>integer</td><td>Primary Key</td></tr><tr><td>origin</td><td>integer</td><td>ID فرودگاه مبدا</td></tr><tr><td>destination</td><td>integer</td><td>ID فرودگاه مقصد</td></tr><tr><td>least</td><td>integer</td><td>کمترین نرخ مصوب</td></tr><tr><td>most</td><td>integer</td><td>بیشترین نرخ مصوب</td></tr><tr><td>updated\_at</td><td>datetime</td><td>زمان آخرین بروزرسانی نرخ</td></tr></tbody></table>

</div>## Core Processing Logic

```
$result = DB::table('approved_flight_rate')
    ->where(function ($q) use ($request) {
        $q->where('origin', $request->get('origin'))
          ->where('destination', $request->get('destination'));
    })
    ->orWhere(function ($q) use ($request) {
        $q->where('origin', $request->get('destination'))
          ->where('destination', $request->get('origin'));
    })
    ->first();
  
```

<div class="api-docs" id="bkmrk-%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-exact-ma">- ابتدا رکورد exact-match برای origin → destination جستجو می‌شود
- در صورت عدم وجود، مسیر معکوس destination → origin بررسی می‌شود
- اگر رکورد یافت شود: مقادیر واقعی least/most برگشت داده می‌شود
- اگر یافت نشود: least = 0 و most = 0 و updated\_at = now()

</div>## Response (Success — Found)

در صورتی که رکورد واقعی در جدول موجود باشد:

```
{
  "status": true,
  "time": 1710000000,
  "data": {
    "origin": 1,
    "destination": 2,
    "least": 850000,
    "most": 1350000,
    "updated_at": "2024-09-12 16:40:55"
  }
}
  
```

<div class="api-docs" id="bkmrk--1"></div>## Response (Success — Not Found)

اگر ریتی برای این مسیر ثبت نشده باشد:

```
{
  "status": true,
  "time": 1710000000,
  "data": {
    "origin": 1,
    "destination": 2,
    "least": 0,
    "most": 0,
    "updated_at": "2025-02-12 14:10:21"
  }
}
  
```

<div class="api-docs" id="bkmrk--2"></div>## Response (Error)

در صورت بروز Exception:

```
{
  "status": false,
  "time": 1710000000,
  "message": "SQLSTATE[HY000]: ...",
  "trace": [ ... ]
}
  
```

<div class="api-docs" id="bkmrk--3"></div>## Flowchart

<div class="api-docs" id="bkmrk-validate-jwt-%E2%86%93-read-"><div class="flowchart"><div class="flow-item">Validate JWT</div><div class="flow-arrow">↓</div><div class="flow-item">Read Query Params: origin, destination</div><div class="flow-arrow">↓</div><div class="flow-item">DB Query: origin → destination</div><div class="flow-arrow">↓</div><div class="flow-item">If not found → DB Query: destination → origin</div><div class="flow-arrow">↓</div><div class="flow-item">Record Found?</div><div class="flow-arrow">↓</div><div class="flow-branch"><div class="flow-item">Yes → Return real least/most</div><div class="flow-item">No → Return least=0, most=0, now()</div></div><div class="flow-arrow">↓</div><div class="flow-item">Return JSON (status=true)</div></div></div>