# DELETE /v2/charter/reservation

# Charter: Soft Delete Reservation(s)

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

<div class="api-docs" id="bkmrk-"></div>## Request Overview

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fcharter%2Fres"><div class="endpoint-info"><div>**URL:** `/v2/charter/reservation`</div><div>**Method:** <span class="method-delete">DELETE</span></div><div>**Controller:** CharterController@deleteCharterReservation</div><div>**Middleware Stack:** authWithJwt</div></div></div>## Access Control

<div class="api-docs" id="bkmrk-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D9%85%D8%B9%D8%AA%D8%A8%D8%B1-jwt">- دسترسی معتبر JWT

</div>## Request Body (JSON)

<div class="api-docs" id="bkmrk-field-type-descripti"><table class="schema-table" dir="rtl"><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td>string</td><td>**(الزامی)** نوع چارتر (مثلاً 'route' یا 'accommodation'). این فیلد برای تعیین جدول صحیح رزروها در پایگاه داده استفاده می‌شود.</td></tr><tr><td>reserves\_id</td><td>array\[integer\]</td><td>**(الزامی)** آرایه‌ای از شناسه‌های رزروهایی که باید حذف شوند.</td></tr></tbody></table>

</div>## Logic Details

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

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

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

<div class="api-docs" id="bkmrk-status-%D8%A8%D9%87-%D9%85%D9%82%D8%AF%D8%A7%D8%B1-2-%D8%AA%D8%BA">- `status` به مقدار **2** تغییر می‌کند.
- `deleted_at` با تاریخ و زمان فعلی سرور پر می‌شود.

</div>### ۲. به‌روزرسانی جدول اتاق‌های اقامتی

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

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

<div class="api-docs" id="bkmrk--1"></div>## Response Structure

### پاسخ موفق

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

### پاسخ خطا

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

<div class="api-docs" id="bkmrk--2"></div>## Flowchart

<div class="api-docs" id="bkmrk-start-%28delete-%2Freser"><div class="flowchart"><div class="flow-item">Start (DELETE /reservation)</div><div class="flow-arrow">↓</div><div class="flow-item">Receive Request Body:  
<small>`type` and `reserves_id` (array)</small></div><div class="flow-arrow">↓</div><div class="flow-item" style="background-color: #f3e5f5;">Get Reservation Table Name using `type`</div><div class="flow-arrow">↓</div><div class="flow-item-process" style="background-color: #e8f5e9;">**Step 1: Update Main Reservation Table**  
<small> `UPDATE charter_reservation_[type]`  
`SET status = 2, deleted_at = NOW()`  
`WHERE id IN (reserves_id)` </small></div><div class="flow-arrow">↓</div><div class="flow-item-process" style="background-color: #e8f5e9;">**Step 2: Update Accommodation Rooms Table**  
<small> `UPDATE charter_reservation_accommodation_rooms`  
`SET status = 2, deleted_at = NOW()`  
`WHERE reservation_id IN (reserves_id)` </small></div><div class="flow-arrow">↓</div><div class="flow-item-success">Return 204 No Content</div><div class="flow-error-path"><div class="flow-arrow-error">→ On Any Exception</div><div class="flow-item-error">Return 400 Bad Request with Error Details</div></div></div></div>