#P1668
GET /v2/charter/list
Charter: List & Search
این اندپوینت جهت دریافت لیست چارترها با قابلیت فیلتر کردن پیشرفته، جستجو بر اساس تاریخ (با منطق متفاوت برای اقامتگاه و پرواز)، مسیرهای دوطرفه و وضعیتهای مختلف استفاده میشود.
Request Overview
URL:
/v2/charter/listMethod: GET
Controller: CharterController@listCharter
Middleware Stack: authWithJwt
Access Control
- دسترسی معتبر JWT
- کاربران با
branch_id = 1به همه رکوردها دسترسی دارند؛ سایرین فقط رکوردهای شعبه خود را میبینند.
Request Parameters (Query String)
کلیه پارامترها به صورت Query Param ارسال میشوند.
| Parameter | Type | Description |
|---|---|---|
| serial | string | فیلتر دقیق بر اساس شماره سریال |
| type | string | نوع چارتر (مثلاً accommodation, flight) |
| action | string | اگر مقدار list ارسال شود، ترتیب نمایش آیتمها در صفحه جاری معکوس میشود. |
| paginate[length] | integer | تعداد آیتم در هر صفحه (پیشفرض: 30) |
| paginate[start] | integer | آفست شروع (پیشفرض: 0) |
| Advanced Filters (آرایه advanced) | ||
| advanced[id] | integer | جستجو بر اساس ID (سیستم به صورت خودکار ۱۰,۰۰۰ واحد از این عدد کم میکند) |
| advanced[from] | date | تاریخ شروع بازه جستجو |
| advanced[to] | date | تاریخ پایان بازه جستجو |
| advanced[origin] | integer | شناسه مبدا |
| advanced[destination] | integer | شناسه مقصد |
| advanced[roundtrip] | boolean | حالت دوطرفه (اگر true باشد، مسیر برگشت هم جستجو میشود) |
| advanced[route] | string | فیلتر بر اساس subtype |
| advanced[status] | string | active: وضعیتهای 1 و 3all: همه وضعیتها (غیر از 1) |
Complex Logic Details
۱. منطق تاریخ (Date Logic)
- حالت عادی (General): جستجو میکند که
startچارتر دقیقاً بین بازهfromوtoباشد. - حالت اقامتگاه (Accommodation): اگر
type=accommodationباشد، سیستم تداخل زمانی (Overlap) را بررسی میکند:- تاریخ شروع چارتر در بازه باشد.
- یا تاریخ پایان چارتر در بازه باشد.
- یا چارتر کل بازه درخواستی را پوشش دهد (شروع چارتر <= شروع درخواست و پایان چارتر >= پایان درخواست).
۲. جستجوی دوطرفه (Roundtrip)
اگر advanced[roundtrip] برابر true باشد و مبدا و مقصد مشخص شده باشند، کوئری به صورت OR اجرا میشود:
(مبدا = Origin AND مقصد = Dest) یا (مبدا = Dest AND مقصد = Origin).
۳. صفحهبندی و مرتبسازی
- مرتبسازی پیشفرض: بر اساس تاریخ شروع (ASC) و سپس شناسه (ASC).
- اگر
action=listباشد، آیتمهای فچ شده در صفحه جاری، توسط کالکشن لاراول معکوس (Reverse) میشوند (نمایش از آخر به اول در همان صفحه).
Response (Success)
{
"items": [
{
"id": 10050,
"serial": "CHR-123",
"type": "flight",
"origin": "THR",
"destination": "MHD",
"start": "2024-05-20 10:00:00",
"status": 1,
// ... other resource fields
}
],
"meta": {
"timestamp": 1715000000,
"table": {
"total": 150
}
}
}
Flowchart
Start (GET /v2/charter/list)
↓
Set Default Pagination (30 items)
↓
Apply Basic Filters (Serial, Type)
↓
Advanced Filters Logic
Date Logic
↓
If Accomm: Check Overlap
Else: Check Start Date
Else: Check Start Date
Roundtrip Logic
↓
If true: (A→B) OR (B→A)
Else: (A→B)
Else: (A→B)
↓
Check Branch (Filter if not ID 1)
↓
Execute Query & Paginate
↓
Action = 'list'?
↓
Yes
↓
Reverse Items Collection
No
↓
Keep Order
↓
Return JSON Resource