Skip to main content
#P1673

DELETE /v2/charter/reservation

Charter: Soft Delete Reservation(s)

این اندپوینت برای حذف نرم (soft delete) یک یا چند رزرو به صورت همزمان طراحی شده است. عملیات حذف به صورت فیزیکی رکوردها را از پایگاه داده پاک نمی‌کند، بلکه وضعیت (status) آن‌ها را به 2 (حذف شده) تغییر داده و فیلد deleted_at را با زمان فعلی پر می‌کند. این متد همچنین رزرو اتاق‌های مرتبط با چارترهای اقامتی را نیز مدیریت می‌کند.

Request Overview

URL: /v2/charter/reservation
Method: DELETE
Controller: CharterController@deleteCharterReservation
Middleware Stack: authWithJwt

Access Control

  • دسترسی معتبر JWT

Request Body (JSON)

Field Type Description
type string (الزامی) نوع چارتر (مثلاً 'route' یا 'accommodation'). این فیلد برای تعیین جدول صحیح رزروها در پایگاه داده استفاده می‌شود.
reserves_id array[integer] (الزامی) آرایه‌ای از شناسه‌های رزروهایی که باید حذف شوند.

Logic Details

فرآیند حذف در دو مرحله کلیدی انجام می‌شود تا از هماهنگی داده‌ها اطمینان حاصل شود:

۱. به‌روزرسانی جدول اصلی رزروها

ابتدا، سیستم با استفاده از پارامتر type، نام جدول مربوط به رزروها (مثلاً charter_reservation_route) را از طریق متد getTableCharter به دست می‌آورد. سپس یک دستور UPDATE گروهی اجرا می‌کند که تمام رکوردهای موجود در آرایه reserves_id را پیدا کرده و فیلدهای زیر را در آن‌ها به‌روزرسانی می‌کند:

  • status به مقدار 2 تغییر می‌کند.
  • deleted_at با تاریخ و زمان فعلی سرور پر می‌شود.

۲. به‌روزرسانی جدول اتاق‌های اقامتی

بلافاصله پس از مرحله اول، یک دستور UPDATE دیگر بر روی جدول charter_reservation_accommodation_rooms اجرا می‌شود. این عملیات نیز تمام رکوردهایی را که reservation_id آن‌ها در آرایه reserves_id وجود دارد، پیدا کرده و آن‌ها را نیز به صورت نرم حذف می‌کند (status=2 و deleted_at=now()).

نکته مهم: این مرحله دوم همیشه اجرا می‌شود، حتی اگر نوع چارتر route باشد. در این حالت، چون هیچ رکوردی در جدول اتاق‌ها با شناسه‌های رزرو پرواز مطابقت ندارد، این دستور تأثیری نخواهد داشت، اما وجود آن برای مدیریت صحیح رزروهای اقامتی ضروری است.

Response Structure

پاسخ موفق

اگر هر دو عملیات به‌روزرسانی با موفقیت انجام شوند، سرور یک پاسخ خالی با کد وضعیت 204 No Content باز می‌گرداند. این نشان می‌دهد که درخواست با موفقیت پردازش شده و نیازی به بازگرداندن محتوا نیست.

پاسخ خطا

در صورت بروز هرگونه استثنا (Exception) در حین اجرای عملیات پایگاه داده، سرور با کد 400 Bad Request پاسخ می‌دهد. بدنه پاسخ شامل یک آبجکت خطا با جزئیاتی مانند کد خطا، پیام و ردپای آن (trace) برای کمک به فرآیند اشکال‌زدایی خواهد بود.

Flowchart

Start (DELETE /reservation)
Receive Request Body:
type and reserves_id (array)
Get Reservation Table Name using type
Step 1: Update Main Reservation Table
UPDATE charter_reservation_[type]
SET status = 2, deleted_at = NOW()
WHERE id IN (reserves_id)
Step 2: Update Accommodation Rooms Table
UPDATE charter_reservation_accommodation_rooms
SET status = 2, deleted_at = NOW()
WHERE reservation_id IN (reserves_id)
Return 204 No Content
→ On Any Exception
Return 400 Bad Request with Error Details