#P1079
Function updateCharter
· هدف:
این متد به عنوان یک نقطه پایانی چندمنظوره برای بهروزرسانی وضعیت (status) و مجوزهای فروش (sell) یک چارتر موجود عمل میکند. منطق اصلی آن بر اساس پارامتر action در درخواست ورودی ('status' یا 'sell') شاخهبندی میشود. در حالت status، متد بررسیهای امنیتی مهمی را انجام میدهد؛ به عنوان مثال، از حذف (تغییر وضعیت به 4) چارتری که دارای رزروهای فروخته شده است، جلوگیری میکند و همچنین تغییر وضعیت چارتری که قبلاً پایان یافته (وضعیت 3)، را غیرممکن میسازد. این کار پایداری و یکپارچگی دادههای مالی و ظرفیتی را تضمین میکند. در حالت sell، این متد به سادگی مجوزهای فروش به همکار (colleague_sell) یا هاب (hub_sell) را بر اساس دادههای ورودی، فعال یا غیرفعال میکند. در نهایت، پس از هر بهروزرسانی موفق، کلید کش مربوط به عنوان چارتر در Redis را حذف میکند تا اطمینان حاصل شود که در درخواستهای بعدی، اطلاعات بهروز شده بازخوانی خواهد شد.
| ویژگیها | توضیحات |
| هدف کلی | مدیریت بهروزرسانیهای خاص و محدود برای یک چارتر، مانند وضعیت و مجوزهای فروش. |
| منطق اصلی | استفاده از if-else بر روی پارامتر action برای تفکیک عملیات. |
| بررسیهای امنیتی | جلوگیری از حذف چارتری که فروش قطعی دارد (status: 4). |
... |
جلوگیری از تغییر وضعیت چارتری که پایان یافته است (status: 3). |
| مدیریت کش | حذف کلید Redis مربوط به عنوان چارتر (charter:{id}:information:title) پس از بهروزرسانی برای اطمینان از تازگی دادهها. |
| خطایابی | بازگرداندن پاسخهای خطای 422 (Unprocessable Entity) و 404 (Not Found) با پیامهای واضح در صورت نقض قوانین یا عدم وجود چارتر. |
· ورودیها (پارامترها):
| توضیحات | موقعیت | نوع داده | نام پارمتر |
| آبجکت اصلی درخواست حاوی تمام دادههای لازم برای ایجاد چارتر. | Route/Body |
integer |
$request->id |
نوع عملیات را مشخص میکند. مقادیر معتبر: 'status' یا 'sell'. |
Body | string |
$request->action |
آرایهای حاوی دادههای لازم برای بهروزرسانی. ساختار آن به action بستگی دارد. |
Body | array |
$request->data |
ساختار $request->data بر اساس action:
- اگر
actionبرابر با'status'باشد: $request->data['status']:integer- وضعیت جدید چارتر (مثلاً 0, 1, 2, 3, 4).- اگر
actionبرابر با'sell'باشد: $request->data['colleague']:boolean- فعال یا غیرفعال کردن مجوز فروش به همکاران.$request->data['hub']:boolean- فعال یا غیرفعال کردن مجوز فروش به هاب.
· خروجی (Return):
| توضیحات | نوع داده |
در صورت موفقیت، یک پاسخ خالی با کد 204 No Content بازگردانده میشود. |
Illuminate\Http\JsonResponse |
در صورت بروز خطا (مانند یافت نشدن چارتر یا نقض قوانین)، یک آبجکت JSON با کد 4xx و پیام خطا بازگردانده میشود. |
Illuminate\Http\JsonResponse |
· مثال استفاده / سناریو:
سناریو ۱: تغییر وضعیت یک چارتر به “کنسل شده”
- Request:
id: 125action: “status”data:{ "status": 4 }- Action:
- متد ابتدا ظرفیت فروخته شده چارتر 125 را بررسی میکند.
- فرض: هیچ بلیتی فروخته نشده است (
capacity['total'] == capacity['capacity']). - وضعیت چارتر در دیتابیس به
4تغییر میکند. - کلید
Redisمربوط بهcharter:125:information:titleحذف میشود.
- Response:
HTTP Status:204 No Content
سناریو ۲: تلاش برای کنسل کردن چارتری که فروش داشته است
- Request:
id: 126action: “status”data:{ "status": 4 }- Action:
- متد ظرفیت فروخته شده چارتر 126 را بررسی میکند.
- فرض: چند بلیت فروخته شده است (
capacity['total'] != capacity['capacity']). - عملیات متوقف میشود.
- Response:
HTTP Status:422 Unprocessable EntityBody:
{
"error": {
"code": 1000,
"message": "بر روی این چارتر رزرو انجام شده است و امکان حذف وجود ندارد."
}
}
سناریو ۳: فعال کردن فروش برای همکاران
- Request:
id: 127action: “sell”data:{ "colleague": true }- Action:
- مقدار فیلد
colleague_sellبرای چارتر 127 در دیتابیس به1تغییر میکند. - کلید
Redisمربوط بهcharter:127:information:titleحذف میشود.
- Response:
HTTP Status:204 No Content