#P1095
Function getAgeTitle 18
· هدف:
این تابع،متد موتوریک اصلیابزار کمکی ساده و بسیارکاربردی پیچیدهیبرای ایجادتعیین چارترهایگروه جدیدسنی در(adult, سیستمchild, است که به عنوانinfant) یک نقطهشخص پایانیبر واحد،اساس قابلیتتاریخ تعریفتولد انواع مختلف چارتر با پیکربندیهای گوناگون را فراهم میکند. هدف اصلی آن، دریافتو یک ساختارتاریخ دادهیمبنا پیچیده(معمولاً ازتاریخ کلاینت،پرواز پردازشیا شروع اقامت) است. منطق آن بر اساس نوعمحاسبه چارتراختلاف (تعداد routeیاروزها accommodation)بین ودو منطقتاریخ تکرار (repeat)، و در نهایت ثبت مجموعهای از رکوردها در پایگاه داده به صورت اتمی و یکپارچه است. این تابع تمام عملیاتهای خود را درون یک DB::transaction قرار میدهد تا اطمینان حاصل شود که یا تمام مراحل (شامل ایجاد چارتر اصلی، کلاسهای قیمتی، مالیاتها و دورههای تکرار) با موفقیت انجام میشوند، یا در صورت بروز کوچکترین خطا، تمام تغییرات به حالت اولیه بازمیگردند (rollback). این رویکرد، از ایجاد دادههای ناقص یا متناقض در دیتابیس جلوگیریکار میکند. اینابتدا متدتاریخ همچنینتولد مسئولیترا آمادهسازیبا دادههایاستفاده پیچیدهایاز مانندFunctions::checkDatetime مسیرهایبه رفتفرمت استاندارد تبدیل کرده و برگشتسپس (inbound/outbound)اختلاف وآن تولیدبا تاریخهایتاریخ تکرارمبنا را بر حسب روز محاسبه میکند. در نهایت، بر اساس الگوهایقوانین مختلفاستاندارد (dates,صنعت weekly,هوانوردی periodic)و گردشگری، گروه سنی را برمشخص عهدهمیکند: داردکمتر ویا درمساوی نهایت،۷۳۰ خلاصهایروز از(۲ شناسههای ایجاد شده راسال) به عنوان خروجیinfant بازمیگرداند.
(نوزاد)، بین ۷۳۰ و ۴۳۸۰ روز (۲ تا ۱۲ سال) به عنوان child (کودک)، و بیشتر از ۴۳۸۰ روز (۱۲ سال) به عنوان adult (بزرگسال) در نظر گرفته میشود.
| ویژگیها | توضیحات |
| هدف کلی | ایجاد یک یا چند چارتر بر اساس تنظیمات ورودی، شامل نوع، جزئیات مسیر/اقامتگاه و الگوی تکرار. |
| عملیات اتمی (Atomic) | استفاده از DB::transaction برای تضمین یکپارچگی دادهها؛ تمام عملیات یا با هم موفق میشوند یا با هم لغو میگردند. |
| پشتیبانی از انواع چارتر | مدیریت منطق متفاوت برای چارترهای route (پرواز، قطار، اتوبوس) و accommodation (هتل). |
| موتور تکرار (Repeat Engine) | قابلیت ایجاد چارترها بر اساس یک الگوی تکرار: لیست تاریخهای مشخص (dates)، روزهای هفتگی (weekly) یا دورههای زمانی متناوب (periodic). |
| ساختار داده پیچیده | پردازش ساختارهای تو در تو برای جزئیات مسیر، کلاسهای قیمتی (calculations)، مالیاتها (taxes) و اطلاعات مالی (financial). |
| پاکسازی کش | پس از ایجاد موفقیتآمیز، کلیدهای مرتبط در Redis را حذف میکند تا اطمینان حاصل شود که دادههای جدید در پاسخهای بعدی لحاظ میشوند. |
· ورودیها (پارامترها):
| توضیحات | نوع داده | نام پارمتر |
| آبجکت اصلی درخواست حاوی تمام دادههای لازم برای ایجاد چارتر. | Illuminate\Http\Request |
$request |
کلید اصلی. نوع چارتر را مشخص میکند. مقادیر معتبر: 'route' یا 'accommodation'. |
string |
$request->type |
(برای type: 'route') نوع وسیله نقلیه را مشخص میکند: 'aircraft', 'train', 'bus'. |
string |
$request->subtype |
| آرایهای حاوی جزئیات اصلی چارتر، مانند مبدأ، مقصد، تاریخ و اطلاعات وسیله نقلیه. | array |
$request->items |
| مهم. آرایهای از آبجکتها که کلاسهای مختلف قیمتی و ظرفیتی چارتر را تعریف میکنند. | array |
$request->calculations |
(اختیاری) آبجکتی که منطق تکرار چارتر را مشخص میکند. شامل type (مانند 'weekly') و جزئیات مربوطه. |
object |
$request->repeat |
(برای type: 'accommodation') شامل start و end برای محدوده تاریخ اقامت. |
object |
$request->date_range |
سایر فیلدها مانند capacity, description, permissions و غیره. |
... |
... |
· خروجی (Return):
| توضیحات | نوع داده |
یک پاسخ JSON که در صورت موفقیت، حاوی یک آرایه با کلیدهای main، calculations، taxes و financial است. این کلیدها به ترتیب شناسههای ایجاد شده برای چارتر اصلی، کلاسهای قیمتی، مالیاتها و اطلاعات مالی را در خود جای دادهاند. در صورت بروز خطا، یک پاسخ با کد وضعیت 500 و پیام خطا برگردانده میشود. |
Illuminate\Http\JsonResponse |
· مثال استفاده:
// سناریو: ایجاد یک چارتر پرواز هفتگی برای روزهای شنبه و دوشنبه
// POST /api/panel/v2/charter/store
// Body (JSON):
{
"type": "route",
"subtype": "aircraft",
"capacity": 180,
"description": "چارتر هفتگی تهران-مشهد",
"permissions": { /* ... */ },
"repeat": {
"type": "weekly",
"from": "1404/08/01",
"to": "1404/08/30",
"days": [6, 1] // شنبه و دوشنبه
},
"items": [
{
"details": {
"origin": { "id": 1, "name": "THR" },
"destination": { "id": 2, "name": "MHD" },
"datetime": "1404/08/04 10:30", // تاریخ یکی از روزهای الگو (یکشنبه)
"vehicle": { /* ... */ }
}
}
],
"calculations": [
{
"name": "اکونومی",
"capacity": 150,
"financial": { /* ... */ }
},
{
"name": "بیزنس",
"capacity": 30,
"financial": { /* ... */ }
}
]
}
// خروجی مورد انتظار (در صورت موفقیت):
{
"main": [101, 102, 103, ...], // شناسههای چارترهای اصلی ایجاد شده برای هر تاریخ
"calculations": [201, 202, 203, ...], // شناسههای کلاسهای قیمتی
"taxes": [301, 302, ...], // شناسههای مالیاتها
"financial": [401, 402, ...] // شناسههای اطلاعات مالی
}