# * PATCH /personnel/shift/reset

<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">PATCH</td><td dir="ltr">/personnel/shift/reset</td><td dir="ltr">OfficialController@shiftWorkReset</td><td dir="ltr">authWithJwt</td><td dir="rtl">بازنشانی کلیه‌ی شیفت‌ها به وضعیت اولیه</td></tr></tbody></table>

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

تابع `shiftWorkReset` کلیه رکوردهای شیفت را از نظر وضعیت، زمان‌بندی و تخصیص‌ها بازنشانی می‌کند. معمولاً جهت پاکسازی داده‌های تستی یا آماده‌سازی دوره جدید کاری به‌کار می‌رود.

<div id="bkmrk-%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-jwt-%D9%88-%D8%A8%D8%B1%D8%B1" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">1. احراز هویت JWT و بررسی نقش HR یا Admin.
2. ثبت عملیات در جدول ممیزی (system\_audit).
3. به‌روزرسانی فیلدهای `status`، `start`، `end` و برگرداندن به مقادیر پیش‌فرض.
4. در صورت وجود وابستگی (مانند حضور کارمندان)، ابتدا درج لاگ هشدار در audit.
5. بازگرداندن نتیجه عملیات همراه با تعداد رکوردهای تغییر یافته.

</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>scope</td><td>Body</td><td>string</td><td>خیر</td><td>محدوده بازنشانی (مثلاً `all` یا `current_month`)</td></tr><tr><td>confirm</td><td>Body</td><td>boolean</td><td>بله</td><td>تأیید نهایی برای انجام بازنشانی (پیش‌فرض false)</td></tr></tbody></table>

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

```
{
  "status": true,
  "time": 1732370189,
  "data": {
    "reset_scope": "all",
    "affected_rows": 46,
    "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-%D9%85%D8%AF%DB%8C%D8%B1" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- دسترسی فقط برای مدیران HR سطح بالا مجاز است.
- در صورت عدم مقداردهی پارامتر `confirm=true`، هیچ تغییری اعمال نمی‌شود.
- تمامی عملیات reset در لاگ ممیزی ثبت می‌شود.

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

<div id="bkmrk-%D8%A8%D8%A7%D8%B2%D9%86%D8%B4%D8%A7%D9%86%DB%8C-%D8%AD%D8%AF%D9%88%D8%AF-%DB%B2%DB%B0%DB%B0-%D8%B1%DA%A9" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- بازنشانی حدود ۲۰۰ رکورد در کمتر از ۶۰ms انجام می‌شود.
- transaction-level lock جهت جلوگیری از تداخل بین درخواست‌های هم‌زمان به‌کار می‌رود.

</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-400-%D9%BE%D8%A7%D8%B1%D8%A7" 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>400</td><td>پارامتر تأیید (`confirm`) ارسال نشده</td><td>Validation</td></tr><tr><td>403</td><td>دسترسی غیرمجاز برای بازنشانی</td><td>Middleware</td></tr><tr><td>500</td><td>خطای داخلی پایگاه داده</td><td>Server Error</td></tr></tbody></table>

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

<div id="bkmrk-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%D8%AA%D8%A3%DB%8C%DB%8C%D8%AF-%D8%AF%D9%88-%D9%85%D8%B1%D8%AD%D9%84" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- افزودن تأیید دو مرحله‌ای (مثلاً OTP مدیریتی پیش از اجرای reset).
- محدودسازی درخواست به شبکه داخلی سازمانی.

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

<div id="bkmrk-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%DA%AF%D8%B2%DB%8C%D9%86%D9%87-reset-s" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- افزودن گزینه reset selective برای انتخاب بخشی از شیفت‌ها.
- به‌کارگیری Job Queue برای بازنشانی حجیم در پس‌زمینه.

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

<div id="bkmrk-%D8%AB%D8%A8%D8%AA-%DA%A9%D8%A7%D9%85%D9%84-%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA-%D8%AF%D8%B1-s" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- ثبت کامل عملیات در `system_audit` با event='shift:reset'.
- شامل: شناسه کاربر، بازه‌ی بازنشانی، IP، timestamp.

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

**shiftWorkReset** آخرین مسیر از مجموعه شیفت‌هاست و هدفش بازگرداندن داده‌ها به حالت پایه‌ای و جلوگیری از انباشت خطای انسانی در تنظیمات زمان‌بندی است. این مسیر با اطمینان بالا، کنترل دسترسی دقیق و پشتیبانی کامل لاگ حسابرسی پیاده‌سازی شده است.

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