#P1081
Function deleteCharter
· هدف:
این متد مسئولیت حذف کامل و دائمی یک چارتر و تمام دادههای وابستهی آن از سیستم را بر عهده دارد. عملکرد این تابع بسیار حساس و حیاتی است، زیرا قبل از اقدام به حذف، یک بررسی امنیتی کلیدی انجام میدهد: با فراخوانی تابع getCharterCapacity، ظرفیت فروختهشدهی چارتر را استعلام میکند. اگر حتی یک صندلی یا اتاق از چارتر فروخته شده باشد (یعنی ظرفیت کل با ظرفیت باقیمانده برابر نباشد)، متد عملیات را متوقف کرده و با یک خطای 409 Conflict به کاربر اطلاع میدهد که حذف به دلیل وجود رزروهای قطعی ممکن نیست. در صورت موفقیتآمیز بودن این بررسی، متد با استفاده از یک DB::transaction، حذف آبشاری دادهها را تضمین میکند. ابتدا خود رکورد چارتر از جدول charters حذف میشود، سپس تمام رکوردهای مرتبط در جداول charter_items و charter_calculations نیز پاک میشوند. این رویکرد تراکنشی، یکپارچگی دیتابیس را حفظ میکند و از باقی ماندن دادههای یتیم (Orphaned Data) جلوگیری مینماید.
| ویژگیها | توضیحات |
| هدف کلی | حذف کامل و دائمی یک چارتر و تمام موجودیتهای مرتبط با آن. |
| نوع حذف | حذف فیزیکی (Hard Delete) از دیتابیس، نه حذف منطقی (Soft Delete). |
| بررسی امنیتی | جلوگیری قاطع از حذف چارتری که دارای فروش قطعی است. |
| یکپارچگی داده | استفاده از DB::transaction برای تضمین حذف اتمیک (موفقیت یا شکست کامل عملیات). |
| حذف آبشاری | حذف رکوردهای وابسته از جداول charter_items و charter_calculations. |
| خطایابی | بازگرداندن خطای 409 Conflict با پیام واضح در صورت نقض قانون فروش. |
| بازخورد موفقیت | ارسال پاسخ 204 No Content در صورت موفقیتآمیز بودن عملیات حذف. |
· ورودیها (پارامترها):
| توضیحات | موقعیت | نوع داده | نام پارمتر |
| شناسه منحصر به فرد چارتری که باید حذف شود. | Route/Body |
integer |
$request->id |
· خروجی (Return):
| توضیحات | نوع داده |
در صورت موفقیت، یک پاسخ خالی با کد 204 No Content بازگردانده میشود. |
Illuminate\Http\JsonResponse |
در صورت وجود رزرو روی چارتر، یک آبجکت JSON با کد 409 Conflict و پیام خطا بازگردانده میشود. |
Illuminate\Http\JsonResponse |
در صورت بروز خطای غیرمنتظره در حین تراکنش دیتابیس، یک آبجکت JSON با کد 400 Bad Request و جزئیات استثناء (Exception) بازگردانده میشود. |
Illuminate\Http\JsonResponse |
· مثال استفاده / سناریو:
سناریو ۱: حذف موفق یک چارتر بدون فروش
- Request:
id: 350- Action:
- متد ظرفیت چارتر با شناسه 350 را بررسی میکند.
- فرض: هیچ رزروی ثبت نشده است (
capacity['total'] == capacity['capacity']). - یک تراکنش دیتابیس آغاز میشود.
- رکوردها از
charter_itemsوcharter_calculationsکهmain_idآنها 350 است، حذف میشوند. - رکورد اصلی از جدول
chartersبا شناسه 350 حذف میشود. - تراکنش با موفقیت
commitمیشود.
- Response:
HTTP Status:204 No Content
سناریو ۲: تلاش برای حذف چارتری که فروش داشته است
- Request:
id: 351- Action:
- متد ظرفیت چارتر با شناسه 351 را بررسی میکند.
- فرض: تعدادی رزرو ثبت شده است (
capacity['total'] != capacity['capacity']). - عملیات متوقف شده و هیچ تغییری در دیتابیس اعمال نمیشود.
- Response:
HTTP Status:409 ConflictBody:
{
"error": {
"code": 1000,
"message": "بر روی این چارتر رزرو انجام شده است و امکان حذف وجود ندارد."
}
}