# GET /b2c/v1/online/flight/class/{calculation_id}

## Get Flight Class Data

این اندپوینت برای واکشی اطلاعات کامل یک کلاس پروازی از روی شناسه محاسبه (`calculation\_id`) طراحی شده است. داده بازگشتی شامل جزئیات فنی، مالی، مارکاپ‌ها و تخفیف‌ها برای سنین مختلف (Adult/Child/Infant) است. درصورت معتبر بودن شناسه، داده از سرویس `AirPlusApi` با متد **search** واکشی می‌شود و پس از بررسی فیلترهای `application_filter` و پردازش مارکاپ‌ها توسط `LibBaseService::checkSearchFlightItem()` به صورت JSON بازگردانده می‌شود.

<div class="api-docs" id="bkmrk-"><div class="endpoint-section">  
</div>---

</div>### Endpoint Info

<div class="api-docs" id="bkmrk-url%3A-%2Fb2c%2Fv1%2Fonline%2F"><div class="endpoint-info"><div>**URL:** `/b2c/v1/online/flight/class/{calculation_id}`</div><div>**Method:** <span class="method-get">GET</span></div><div>**Controller:** `V1OnlineController@getFlightClassData`</div><div>**Service:** `AirPlusApi & LibBaseService::checkSearchFlightItem`</div><div>**Auth:** Public (Without JWT)</div></div>---

</div>### Path Parameters

<div class="api-docs" id="bkmrk-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D9%86%D9%88%D8%B9-%D8%A7%D8%AC%D8%A8%D8%A7%D8%B1%DB%8C-%D8%AA"><table class="schema-table" dir="rtl"><thead><tr><th>پارامتر</th><th>نوع</th><th>اجباری</th><th>توضیح</th></tr></thead><tbody><tr><td>calculation\_id</td><td>integer</td><td>✅</td><td>شناسه محاسبهٔ نرخ که از جدول `charter_calculations_route` استخراج می‌شود. مقدار واقعی فیلد در DB برابر `calculation_id - 10000` است.</td></tr></tbody></table>

</div>### Query Parameters

<div class="api-docs" id="bkmrk-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D9%86%D9%88%D8%B9-%D8%A7%D8%AC%D8%A8%D8%A7%D8%B1%DB%8C-%D8%AA-1"><table class="schema-table" dir="rtl"><thead><tr><th>پارامتر</th><th>نوع</th><th>اجباری</th><th>توضیح</th></tr></thead><tbody><tr><td>branch</td><td>string</td><td>✅</td><td>شناسهٔ شعبه فعلی برای تنظیم مسیر فروش (مثل `b2c-shiraz`).</td></tr><tr><td>group</td><td>string</td><td>❌</td><td>گروه کاربری فعلی. مقادیر مجاز: `b2c`, `b2b`, `b2e`, `agency`.</td></tr><tr><td>level</td><td>integer</td><td>❌</td><td>سطح کاربر در گروه (پیش‌فرض ۱).</td></tr></tbody></table>

---

</div>### Logic Flow

<div class="api-docs" id="bkmrk-%F0%9F%93%A9-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D9%88%D8%B1%D9%88%D8%AF%DB%8C-calcu"><div class="flowchart" dir="rtl"><div class="flow-item">📩 دریافت ورودی `calculation_id` و پارامترهای `branch`, `group`, `level`</div><div class="flow-arrow">↓</div><div class="flow-item-process">**۱. بررسی وجود رکورد محاسبه:**  
جستجو در جدول `charter_calculations_route` با شرط‌های:  
`id = calculation_id - 10000` و `status = 1` → واکشی `main_id`.</div><div class="flow-arrow">↓</div><div class="flow-item-process">**۲. فراخوانی AirPlusApi:**  
متد `sendRequest('search')` با پارامترهای زیر:  
- charter\_id = main\_id
- calculation\_id = calculation\_id - 10000
- all\_routes = true

پاسخ در کلید `Data.Information[0]` شامل کلاس‌های پروازی است.</div><div class="flow-arrow">↓</div><div class="flow-item-process">**۳. اجرای منطق پردازش کلاس‌ها:**  
انتقال داده به `LibBaseService::checkSearchFlightItem()` برای:  
- مرتب‌سازی کلاس‌ها بر اساس قیمت، ظرفیت، و ویژگی‌های Remarks.
- اعمال مارکاپ‌ها و تخفیف‌ها بر اساس گروه کاربر و نوع پرواز.
- بررسی `application_filter` برای اعتبار مبدا/مقصد، ایرلاین و حالت‌های allowed/unallowed.

</div><div class="flow-arrow">↓</div><div class="flow-item-success">✅ در صورت موفقیت، دادهٔ نهایی کلاس‌ها در قالب `payload` بازگردانده می‌شود.</div><div class="flow-arrow">↓</div><div class="flow-item-failed">❌ در صورت عدم پیدا شدن رکورد محاسبه، پاسخ خطا با کد 404 و message "آیتم مورد نظر یافت نشد." برگردانده می‌شود.</div></div>---

</div>### Response Samples

#### ✅ موفق (پردازش کلاس‌های پروازی)

```json
{
  "payload": {
    "Airline": { "iata": "W5", "title": "Mahan Air" },
    "Origin": { "iata": "THR" },
    "Destination": { "iata": "MHD" },
    "FlightNumber": "W51234",
    "FlightType": "Charter",
    "Classes": [
      {
        "CabinType": "Economy",
        "Financial": {
          "Adult": {
            "BaseFare": 950000,
            "Tax": 50000,
            "Payable": 1000000,
            "Markup": {
              "percent": 10,
              "price": 100000,
              "final": 1100000,
              "discount": { "percent": 0, "price": 0 }
            }
          }
        },
        "AvailableSeat": 4,
        "Remarks": {
          "Inbound": { "Special": 0, "TourRequirement": false }
        }
      }
    ]
  },
  "meta": { "timestamp": 1733750500 }
}
```

#### ❌ خطا – آیتم یافت نشد

```json
{
  "error": {
    "code": 1001,
    "message": ".آیتم مورد نظر یافت نشد"
  },
  "meta": { "timestamp": 1733750510 }
}
```

<div class="api-docs" id="bkmrk--1">---

</div>### Technical Notes

<div class="api-docs" id="bkmrk-%D9%85%D8%A7%D8%B1%DA%A9%D8%A7%D9%BE%E2%80%8C%D9%87%D8%A7-%D8%A7%D8%B2-hubcont">- مارکاپ‌ها از `HubController::markups($branch)` خوانده می‌شوند و طبق گروه و سطح کاربر اعمال می‌شوند.
- محاسبات تخفیف شامل فیلدهای `discount.percent` و `discount.value` برای هر سن مسافر است.
- فیلترهای سیستم (جدول `application_filter`): بسته به نوع پرواز (system/charter/any) و وضعیت (`allowed/unallowed`) ترتیب اجرا دارند.
- در صورتی که داده‌ای با شرایط فیلتر تطابق نداشته باشد، تابع `checkSearchFlightItem` مقدار `false` بازمی‌گرداند.
- در خروجی API، مقادیر مالی هر رده سنی شامل `BaseFare`, `Tax`, `TotalFare`, `Payable`, `Markup` و `Commission` است.

</div>