#P1083
Function listCharter
· هدف:
این متد به عنوان یک موتور جستجو و لیستساز قدرتمند برای چارترها عمل میکند. هدف اصلی آن فراهم کردن یک رابط کاربری منعطف برای بازیابی چارترها بر اساس مجموعهی گستردهای از فیلترها، از جمله فیلترهای ساده (مانند serial, type) و جستجوی پیشرفته (advanced) است. بخش advanced امکان فیلتر بر اساس بازه زمانی، مبدأ، مقصد، دوطرفه بودن (roundtrip)، نوع مسیر (هوایی، ریلی و…) و وضعیت (فعال/غیرفعال) را فراهم میکند. متد به طور خودکار صفحهبندی (Pagination) را مدیریت کرده و مقادیر پیشفرض را در صورت عدم ارائه، تنظیم میکند. یک ویژگی خاص این متد، قابلیت مرتبسازی معکوس (action == 'list') نتایج است که برای نمایش آخرین موارد ثبتشده در ابتدا کاربرد دارد. همچنین، این متد با در نظر گرفتن سطح دسترسی کاربر، نتایج را فقط به شعبه مربوط به همان کاربر محدود میکند (مگر اینکه کاربر ادمین اصلی با branch=1 باشد).
| ویژگیها | توضیحات |
| هدف کلی | جستجو، فیلتر و صفحهبندی جامع چارترها. |
| فیلترهای اصلی | serial, type. |
| فیلتر پیشرفته | بازه زمانی (from, to)، مبدأ/مقصد، roundtrip، subtype, status. |
| مدیریت شعبه | محدودسازی خودکار نتایج به شعبه کاربر لاگین کرده. |
| صفحهبندی | مدیریت هوشمند پارامترهای paginate با مقادیر پیشفرض. |
| مرتبسازی | مرتبسازی پیشفرض بر اساس تاریخ شروع و شناسه. |
| مرتبسازی معکوس | قابلیت برعکس کردن ترتیب آیتمهای صفحه فعلی با action=list. |
| فرمت خروجی | استفاده از CharterResource برای استانداردسازی آبجکتهای JSON خروجی. |
· ورودیها (پارامترها):
| توضیحات | موقعیت | نوع داده | نام پارمتر |
| شناسه منحصر به فرد چارتری که باید حذف شود. | Query |
string |
serial |
نوع چارتر (مثلاً route, accommodation). |
Query |
string |
type |
اگر مقدار list باشد، ترتیب نتایج صفحه فعلی معکوس میشود. |
Query |
string |
action |
آرایهای برای مدیریت صفحهبندی شامل length (تعداد در صفحه) و start (نقطه شروع). |
Query |
array |
paginate |
| آرایهای برای فیلترهای پیشرفته. | Query |
array |
advanced |
ساختار آرایه advanced:
id:integer- جستجو بر اساس شناسه نمایشی (id - 10000).from,to:string(date) - بازه زمانی برای فیلتر تاریخstartوendچارتر.origin,destination:integer- شناسه شهر/فرودگاه مبدأ و مقصد.roundtrip:boolean- آیا مسیرهای دوطرفه (رفت و برگشت) نیز در نظر گرفته شوند یا خیر.route:string-subtypeچارتر (مثلاًaircraft,train).status:string- وضعیت چارتر (all,active,inactive).
· خروجی (Return):
| توضیحات | نوع داده |
یک آبجکت JSON حاوی دو کلید اصلی: items (آرایهای از چارترها با فرمت CharterResource) و meta (شامل timestamp و اطلاعات جدول مانند total تعداد کل نتایج). |
Illuminate\Http\JsonResponse |
· مثال استفاده / سناریو:
سناریو ۱: جستجوی پروازهای فعال تهران به مشهد در هفته آینده
- Request URL:
/api/panel/v2/charter/list?advanced[type]=route&advanced[subtype]=aircraft&advanced[origin]=1&advanced[destination]=2&advanced[from]=2025-10-16&advanced[to]=2025-10-23&advanced[status]=active&paginate[length]=10 - Action:
- متد
listCharterاجرا میشود. - کوئری اصلی به جدول
chartersاعمال میشود. - فیلتر
where('type', 'route')وwhere('subtype', 'aircraft')اعمال میشود. - فیلتر
where('origin', 1)وwhere('destination', 2)اعمال میشود. - فیلتر
whereBetween('start', ['2025-10-16 00:00:00', '2025-10-23 23:59:59'])اعمال میشود. - فیلتر
whereIn('status', [1, 3])برای وضعیتactiveاعمال میشود. - نتایج بر اساس تاریخ شروع مرتب شده و ۱۰ مورد اول بازگردانده میشود.
- Response:
HTTP Status:200 OKBody:
{
"items": [
{ "...charter object 1..." },
{ "...charter object 2..." },
// ... up to 10 items
],
"meta": {
"timestamp": 1728994200,
"table": {
"total": 54 // Total charters matching the criteria
}
}
}