# PUT /personnel

<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">PUT</td><td dir="ltr">/personnel</td><td dir="ltr">OfficialController@personnelUpdate</td><td dir="ltr">authWithJwt</td><td dir="rtl">ویرایش اطلاعات پرسنل موجود (نام، نقش، شعبه، وضعیت و ...)</td></tr></tbody></table>

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

تابع `personnelUpdate` ابتدا بررسی می‌کند که کاربر جاری اجازه ویرایش دارد. سپس داده‌های جدید را از درخواست دریافت کرده، اعتبارسنجی می‌کند و رکورد مربوطه را در جدول `operators` یا جداول مرتبط به‌روزرسانی می‌نماید. در پایان، خروجی موفقیت‌آمیز برمی‌گرداند.

<div id="bkmrk-%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%B3%D9%86%D8%AC%DB%8C-jwt-%D9%88-%D9%86%D9%82%D8%B4" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">1. اعتبارسنجی JWT و نقش کاربر.
2. بررسی وجود شناسه (`id`) پرسنل.
3. دریافت فیلدهای جدید مانند نام، نقش، شعبه، وضعیت.
4. اجرای کوئری `UPDATE` متناسب با فیلدهای ارسالی.
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>id</td><td>Body</td><td>integer</td><td>بله</td><td>شناسه پرسنل هدف</td></tr><tr><td>name</td><td>Body</td><td>string</td><td>خیر</td><td>نام کامل جدید</td></tr><tr><td>username</td><td>Body</td><td>string</td><td>خیر</td><td>نام کاربری جدید</td></tr><tr><td>password</td><td>Body</td><td>string</td><td>خیر</td><td>رمز عبور جدید (هش می‌شود)</td></tr><tr><td>branch</td><td>Body</td><td>integer</td><td>خیر</td><td>شناسه شعبه جدید</td></tr><tr><td>role</td><td>Body</td><td>integer</td><td>خیر</td><td>شناسه نقش جدید</td></tr><tr><td>status</td><td>Body</td><td>integer</td><td>خیر</td><td>وضعیت فعال/غیرفعال</td></tr></tbody></table>

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

```
{
  "status": true,
  "time": 1732366220,
  "data": {
    "id": 152,
    "name": "علیرضا ایرانپور",
    "branch": "اصفهان",
    "role": "کارشناس فنی",
    "status": 1,
    "updated_at": "1404/08/03 13:02:31"
  }
}
```

<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%85%D8%AD%D8%AF%D9%88%D8%AF-%D8%A8%D9%87-%D9%86%D9%82%D8%B4%E2%80%8C" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- دسترسی محدود به نقش‌های Admin و HR.
- همه ورودی‌ها باید اعتبارسنجی و پاکسازی شوند.
- رمز عبور فقط در صورت ارسال هش می‌شود.

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

<div id="bkmrk-%D8%A8%D9%87%E2%80%8C%D8%B1%D9%88%D8%B2%E2%80%8C%D8%B1%D8%B3%D8%A7%D9%86%DB%8C-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D9%85" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- به‌روز‌رسانی رکورد معمولاً &lt; 50ms زمان می‌برد.
- در به‌روزرسانی‌های زیاد، استفاده از تراکنش DB توصیه می‌شود.

</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
- Hash Facade (در صورت تغییر رمز)

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

<div id="bkmrk-%DA%A9%D8%AF-%D8%B4%D8%B1%D8%AD-%D9%85%D9%86%D8%A8%D8%B9-400-%D9%88%D8%B1%D9%88%D8%AF" 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>ورودی ناقص یا نامعتبر</td><td>Validation</td></tr><tr><td>404</td><td>پرسنل یافت نشد</td><td>DB Lookup</td></tr><tr><td>500</td><td>خطای داخلی سرور</td><td>Exception Handler</td></tr></tbody></table>

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

<div id="bkmrk-%D9%88%D8%B1%D9%88%D8%AF-%D9%87%D9%85%D9%87-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%D8%A7%D8%AA-%D8%A8%D9%87-" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- ورود همه تغییرات به لاگ ممیزی.
- ارسال نوتیفیکیشن به کاربر در صورت تغییر رمز یا نقش.

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

<div id="bkmrk-%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C-%D8%A7%D8%B2-partial-" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- پشتیبانی از Partial Update (PATCH) برای کاهش حجم داده.
- امکان تغییر هم‌زمان دسترسی‌ها.

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

<div id="bkmrk-%D8%AB%D8%A8%D8%AA-%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%D8%B4%D8%AE%D8%B5-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%E2%80%8C" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- ثبت شناسه شخص تغییر‌دهنده و تاریخ دقیق تغییر.

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

**personnelUpdate** برای به‌روزرسانی امن و سریع اطلاعات پرسنل استفاده می‌شود و باید با کنترل دقیق مجوز اجرا گردد.

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