#P1674
PATCH /v2/charter/reservation/undo
Charter: Undo Reservation Deletion
این اندپوینت برای بازگردانی یک رزرو که قبلاً به صورت نرم (soft delete) حذف شده است، استفاده میشود. عملیات اصلی، تغییر وضعیت (status) رزرو از 2 (حذف شده) به 1 (قطعی) و پاک کردن مقدار فیلد deleted_at است. نکته بسیار مهم در این فرآیند، بررسی مجدد ظرفیت خالی قبل از بازگردانی است که دارای منطق متفاوتی برای مسافران نوزاد و غیرنوزاد میباشد.
Request Overview
/v2/charter/reservation/undoAccess Control
- دسترسی معتبر JWT
Request Body (JSON)
| Field | Type | Description |
|---|---|---|
| main_id | integer | (الزامی) شناسه چارتر اصلی. این شناسه برای تشخیص نوع چارتر (مثلاً 'route' یا 'accommodation') و پیدا کردن جدول صحیح رزروها به کار میرود. |
| reserves_id | integer | (الزامی) شناسه رزرو مشخصی که باید بازگردانی شود. (توجه: با وجود نام جمع، این فیلد فقط یک شناسه را میپذیرد). |
Logic Details
فرآیند بازگردانی با یک بررسی ظرفیت حیاتی همراه است تا از فروش بیش از حد جلوگیری شود.
۱. یافتن رزرو و بررسی اولیه
ابتدا سیستم با استفاده از main_id و reserves_id، رکورد رزرو حذف شده را از جدول مربوطه پیدا میکند. اگر رکوردی یافت نشود، یک خطای عمومی رخ داده و پاسخ 400 بازگردانده میشود.
۲. بررسی ظرفیت (Capacity Check)
این مهمترین بخش منطق است. سیستم متد ReservationController::capacityItemCharter را فراخوانی میکند تا ظرفیت باقیمانده واقعی را محاسبه کند. این متد با کسر کردن رزروهای قطعی، گارانتی و قفلهای موقت از ظرفیت کل، عدد نهایی را به دست میآورد. سپس، یک شرط بر اساس نوع مسافر اعمال میشود:
- برای مسافران بزرگسال و کودک (Non-Infant):
سیستم بررسی میکند که آیا ظرفیت باقیمانده>= 0است. از آنجایی که ظرفیت نمیتواند منفی باشد، این شرط همیشه درست است. این یعنی بازگردانی رزرو بزرگسال/کودک به بررسی ظرفیت نیازی ندارد و همیشه موفقیتآمیز خواهد بود. فرض بر این است که ظرفیت این مسافر قبلاً اشغال شده بوده و اکنون صرفاً به حالت فعال بازمیگردد. - برای مسافران نوزاد (Infant):
سیستم بررسی میکند که آیا ظرفیت باقیمانده>= 1است. این بدان معناست که برای بازگرداندن یک رزرو نوزاد، باید حداقل یک جای خالی وجود داشته باشد. این منطق نشان میدهد که نوزادان ممکن است ظرفیت متفاوتی (مثلاً ظرفیت صندلی پرواز) را اشغال کنند که باید مجدداً بررسی شود.
۳. عملیات پایگاه داده
- در صورت موفقیتآمیز بودن بررسی ظرفیت: سیستم یک دستور
UPDATEاجرا کرده و مقادیر زیر را برای رزرو مورد نظر تنظیم میکند:statusبه 1 (قطعی)updated_atبه زمان فعلیdeleted_atبه NULL
- در صورت شکست در بررسی ظرفیت (فقط برای نوزاد): عملیات متوقف شده و یک خطای مشخص به کاربر بازگردانده میشود.
Response Structure
پاسخ موفق
اگر بازگردانی با موفقیت انجام شود، سرور یک پاسخ خالی با کد وضعیت 204 No Content ارسال میکند.
پاسخهای خطا
- کد
400 Bad Requestباcode: 1008: این خطا فقط زمانی رخ میدهد که یک رزرو نوزاد در حال بازگردانی باشد اما ظرفیت آیتم تکمیل شده باشد.
متن خطا: "ظرفیت این آیتم تکمیل شده است" - کد
400 Bad Request(عمومی): در صورت بروز هر خطای پیشبینی نشده دیگر، مانند یافت نشدن رزرو، یک پاسخ خطای عمومی شامل جزئیات استثنا (trace) برای اشکالزدایی بازگردانده میشود.
Flowchart
SET status = 1
SET updated_at = NOW()
SET deleted_at = NULL
(e.g., Cannot read property of null)
with trace