Skip to main content
#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: 125
  • action: “status”
  • data: { "status": 4 }
  • Action:
  1. متد ابتدا ظرفیت فروخته شده چارتر 125 را بررسی می‌کند.
  2. فرض: هیچ بلیتی فروخته نشده است (capacity['total'] == capacity['capacity']).
  3. وضعیت چارتر در دیتابیس به 4 تغییر می‌کند.
  4. کلید Redis مربوط به charter:125:information:title حذف می‌شود.
  • Response:
  • HTTP Status: 204 No Content

سناریو ۲: تلاش برای کنسل کردن چارتری که فروش داشته است

  • Request:
  • id: 126
  • action: “status”
  • data: { "status": 4 }
  • Action:
  1. متد ظرفیت فروخته شده چارتر 126 را بررسی می‌کند.
  2. فرض: چند بلیت فروخته شده است (capacity['total'] != capacity['capacity']).
  3. عملیات متوقف می‌شود.
  • Response:
  • HTTP Status: 422 Unprocessable Entity
  • Body:
json
        {
            "error": {
                "code": 1000,
                "message": "بر روی این چارتر رزرو انجام شده است و امکان حذف وجود ندارد."
            }
        }

سناریو ۳: فعال کردن فروش برای همکاران

  • Request:
  • id: 127
  • action: “sell”
  • data: { "colleague": true }
  • Action:
  1. مقدار فیلد colleague_sell برای چارتر 127 در دیتابیس به 1 تغییر می‌کند.
  2. کلید Redis مربوط به charter:127:information:title حذف می‌شود.
  • Response:
  • HTTP Status: 204 No Content