# جریان کاربری — تسک ۱۰: مدیریت پرسنل (Staff) ## جریان ایجاد پرسنل جدید ``` مدیر کلینیک/دکتر وارد پنل می‌شود │ ▼ GET /api/v1/staff → لیست پرسنل فعلی context جاری نمایش داده می‌شود │ ▼ کاربر روی «افزودن پرسنل» کلیک می‌کند → Modal باز می‌شود │ ▼ POST /api/v1/staff { full_name, phone?, job_title?, address?, national_code? } │ ├─► 422: full_name خالی است → نمایش خطا در فرم │ └─► 201: پرسنل ایجاد شد → لیست refresh می‌شود ``` ## جریان ویرایش پرسنل ``` کاربر روی آیکن ویرایش در جدول کلیک می‌کند │ ▼ Modal با اطلاعات فعلی پر می‌شود │ ▼ PATCH /api/v1/staff/{uuid} { full_name, phone, job_title, ... } │ ├─► 403: این پرسنل متعلق به شما نیست └─► 200: ویرایش موفق → Modal بسته می‌شود ``` ## جریان غیرفعال‌سازی (Soft Delete) ``` کاربر روی toggle در جدول کلیک می‌کند │ ▼ PATCH /api/v1/staff/{uuid}/toggle │ ▼ active: true → false یا false → true │ ▼ در لیست: badge وضعیت تغییر می‌کند (فعال/غیرفعال) ``` ## چرا حذف سخت ممنوع است ``` clinic_staff (active=false) │ ├── service_items.staff_id → هنوز به پرسنل ارجاع دارد │ (تاریخچه سرویس‌ها حفظ می‌شود) │ └── session_services.staff_id → سشن‌های قبلی بیمار نام انجام‌دهنده را نشان می‌دهند ``` اگر پرسنل حذف سخت می‌شد: - `service_items.staff_id` → NULL (انجام‌دهنده سرویس گم می‌شد) - `session_services.staff_id` → NULL (تاریخچه ویزیت ناقص می‌شد) ## نمایش در Frontend (StaffPage.tsx) ``` ┌─────────────────────────────────────────────────┐ │ پرسنل کلینیک [+ افزودن] │ ├──────────┬──────────┬──────────┬────────────────┤ │ نام │ سمت │ تلفن │ وضعیت عملیات│ ├──────────┼──────────┼──────────┼────────────────┤ │ علی رضایی│ پرستار │ 0912... │ ✅فعال ✏️ 🔘 │ │ مریم نوری│ منشی │ 0913... │ ❌غیرفعال✏️ 🔘│ └──────────┴──────────┴──────────┴────────────────┘ ``` - ستون آخر: آیکن ویرایش (Modal) + toggle وضعیت - غیرفعال‌ها با رنگ کمتر نمایش داده می‌شوند اما از لیست حذف نمی‌شوند - فیلتر: «فقط فعال‌ها» / «همه» — query param `?active=1`