#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 خروجی. |
· ورودیها (پارامترها):
| توضیحات | موقعیت | نوع داده | نام پارمتر |
| شناسه منحصر به فرد چارتری که باید حذف شود. | |
|
|
نوع چارتر (مثلاً 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 (آرایهای از چارترها با ) meta (شامل timestamp و | |
|
Illuminate\Http\JsonResponse |
· مثال استفاده / سناریو:
سناریو ۱: حذفجستجوی موفقپروازهای یکفعال چارترتهران بدونبه فروشمشهد در هفته آینده
Request:Request URL:id/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: 350- Action:
- متد
ظرفیتlistCharterچارتر با شناسه 350 را بررسی میکند. فرض:هیچ رزروی ثبت نشده است (capacity['total'] == capacity['capacity']).یک تراکنش دیتابیس آغازاجرا میشود.رکوردها ازcharter_itemsوcharter_calculationsکهmain_idآنها 350 است، حذف میشوند.رکوردکوئری اصلیازبه جدولchartersبا شناسه 350 حذفاعمال میشود.تراکنش با موفقیتفیلتروcommitwhere('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:204200No Content
سناریو ۲: تلاش برای حذف چارتری که فروش داشته است
Request:id: 351Action:
متد ظرفیت چارتر با شناسه 351 را بررسی میکند.فرض:تعدادی رزرو ثبت شده است (capacity['total'] != capacity['capacity']).عملیات متوقف شده و هیچ تغییری در دیتابیس اعمال نمیشود.
Response:HTTP Status:409 ConflictOKBody:
{
"error"items": [
{ "...charter object 1..." },
{ "...charter object 2..." },
// ... up to 10 items
],
"meta": {
"code"timestamp": 1000,1728994200,
"message"table": {
"برtotal": روی54 این// چارترTotal رزروcharters انجامmatching شدهthe است و امکان حذف وجود ندارد."criteria
}
}
}