# DELETE /personnel/shift

<div id="bkmrk-" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>### Route Info

<div id="bkmrk-method-endpoint-cont" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"><table border="1" cellpadding="6" style="border-collapse: collapse; width: 96%; margin: 15px auto; text-align: center;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>Method</td><td>Endpoint</td><td>Controller</td><td>Middleware</td><td>Purpose</td></tr><tr><td dir="ltr">DELETE</td><td dir="ltr">/personnel/shift</td><td dir="ltr">OfficialController@shiftWorkDestroy</td><td dir="ltr">authWithJwt</td><td dir="rtl">حذف (یا غیرفعال‌سازی) یک شیفت کاری موجود</td></tr></tbody></table>

</div>### منطق عملکرد تابع

تابع `shiftWorkDestroy`‌ بسته به نوع درخواست دریافتی، یا شیفت را به‌صورت کامل از جدول حذف می‌کند یا با تغییر وضعیت آن به حالت غیرفعال، حذف منطقی انجام می‌دهد. این کنترل ضمن بررسی نقش کاربر، اطمینان حاصل می‌کند که شیفت درحال استفاده (مثلاً تخصیص‌داده‌شده به پرسنل) قابل حذف نیست.

<div id="bkmrk-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%D8%B4%DB%8C%D9%81%D8%AA-%D8%A7%D8%B2" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">1. دریافت شناسه شیفت از پارامتر ورودی.
2. بررسی وجود شیفت در دیتابیس.
3. در صورت فعال بودن پرچم `force` → حذف فیزیکی رکورد.
4. در غیر این صورت → تغییر فیلد `status` به ۰ (غیرفعال).
5. بازگرداندن پاسخ JSON بر اساس نتیجه عملیات.

</div>### پارامترهای ورودی

<div id="bkmrk-%D9%86%D8%A7%D9%85-%D9%85%D8%AD%D9%84-%D9%86%D9%88%D8%B9-%D8%A7%D9%84%D8%B2%D8%A7%D9%85%DB%8C-%D8%AA" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"><table border="1" cellpadding="6" style="border-collapse: collapse; width: 95%; margin: 15px auto; text-align: center;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>نام</td><td>محل</td><td>نوع</td><td>الزامی</td><td>توضیح</td></tr><tr><td>id</td><td>Body</td><td>integer</td><td>بله</td><td>شناسه شیفت قابل حذف</td></tr><tr><td>force</td><td>Body</td><td>boolean</td><td>خیر</td><td>در صورت true، رکورد به‌صورت دائمی حذف می‌شود</td></tr></tbody></table>

</div>### ساختار خروجی

```
{
  "status": true,
  "time": 1732369925,
  "data": {
    "id": 24,
    "deleted_type": "soft",
    "message": "شیفت با موفقیت غیرفعال شد."
  }
}
```

<div id="bkmrk--1" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>### نکات امنیتی

<div id="bkmrk-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D9%81%D9%82%D8%B7-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%D8%A7%D8%B1%D8%A8" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- دسترسی فقط برای کاربران دارای نقش HR یا Admin مجاز است.
- در صورت ارتباط شیفت با رکوردهای دیگر (مثلاً time‑table پرسنل)، حذف مسدود می‌شود.

</div>### عملکرد

<div id="bkmrk-%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA-%D8%AD%D8%B0%D9%81-%D9%85%D9%86%D8%B7%D9%82%DB%8C-%D8%B2%DB%8C%D8%B1" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- عملیات حذف منطقی زیر ۲۰ms (در حذف نرم) و حذف فیزیکی ~۳۰ms زمان می‌برد.
- Transaction Database برای اطمینان از Atomic بودن به‌کار می‌رود.

</div>### Dependencies

<div id="bkmrk-illuminate%5Csupport%5Cf" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- Illuminate\\Support\\Facades\\DB
- Carbon\\Carbon
- App\\Models\\ShiftWork

</div>### کدهای خطا

<div id="bkmrk-%DA%A9%D8%AF-%D8%B4%D8%B1%D8%AD-%D9%85%D9%86%D8%A8%D8%B9-404-%D8%B4%DB%8C%D9%81%D8%AA" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"><table border="1" cellpadding="6" style="border-collapse: collapse; width: 90%; margin: 15px auto; text-align: center;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>کد</td><td>شرح</td><td>منبع</td></tr><tr><td>404</td><td>شیفت یافت نشد</td><td>Database</td></tr><tr><td>409</td><td>شیفت دارای وابستگی است (قابل حذف نیست)</td><td>Business Rule</td></tr><tr><td>500</td><td>خطای داخلی سرور</td><td>Exception Handler</td></tr></tbody></table>

</div>### پیشنهادهای امنیتی

<div id="bkmrk-%D8%AB%D8%A8%D8%AA-%D9%84%D8%A7%DA%AF-%D9%86%D9%88%D8%B9-%D8%AD%D8%B0%D9%81-%D9%88-%D8%B4%D9%86" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- ثبت لاگ نوع حذف و شناسه کاربر حذف‌کننده در `shift_audit_log`.
- در حذف دائمی، ارسال هشدار تأیید دوم در رابط کاربری.

</div>### پیشنهادهای توسعه‌ای

<div id="bkmrk-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-endpoint-%D8%A8%D8%B1%D8%A7%DB%8C" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- افزودن Endpoint برای بازیابی شیفت‌های حذف‌شده (Recycle Bin).
- بازطراحی حذف به‌صورت asynchronous با صف پردازش در Redis Queue.

</div>### ممیزی و ثبت وقایع

<div id="bkmrk-%D8%AF%D8%B1-%D8%AC%D8%AF%D9%88%D9%84-system_audit" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- در جدول `system_audit` ثبت می‌شود با event='shift:delete'.
- فیلدهای کلیدی: user\_id, shift\_id, delete\_type, ip

</div>### جمع‌بندی

**shiftWorkDestroy** مسیر رسمی حذف شیفت است که قابلیت حذف منطقی و دائمی را فراهم می‌کند. حذف ایمن با کنترل وابستگی، و ورود لاگ کامل در سامانه حسابرسی از ویژگی‌های کلیدی آن محسوب می‌شود.

<div id="bkmrk-delete-personnel-shift" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>