feat: add staff role functionality with dashboard access and service management
- Implemented SidebarStaff component tests to ensure staff users see only their dashboard and services. - Created StaffMyServicesPage to display assigned services for staff users. - Added migration to link clinic staff rows to user accounts for ROLE_STAFF access. - Defined StaffPermissions class for static permissions related to staff role. - Introduced StaffRouteGuardSubscriber to restrict API access for staff users. - Developed StaffAccountService for managing staff user accounts and linking them to clinic staff. - Added comprehensive tests for StaffAccountService to validate user creation, mobile number handling, and account attachment. - Implemented tests for staff dashboard access to ensure proper permissions and access control. - Created tests for staff login context to verify correct environment visibility based on user roles.
This commit is contained in:
@@ -242,6 +242,71 @@ Returns stats for the authenticated secretary and (conditionally) today's appoin
|
||||
|
||||
---
|
||||
|
||||
## GET /api/v1/dashboard/staff
|
||||
|
||||
داشبورد پرسنل: سرویسهایی که به این پرسنل تخصیص یافته و نوبتهای امروزِ خودش.
|
||||
|
||||
**Auth:** `ROLE_STAFF` — و علاوه بر نقش، باید ردیف **فعالِ** `clinic_staff` در محیط فعال وجود
|
||||
داشته باشد. توکن تا انقضا معتبر میماند، پس غیرفعالکردن پرسنل همان لحظه با همین بررسی
|
||||
دسترسی را میبندد.
|
||||
|
||||
این تنها اندپوینت دادهٔ نقش `staff` است؛ بقیهٔ `/api/v1/*` برای این نقش ۴۰۳ میدهد
|
||||
(`StaffRouteGuardSubscriber` — رجوع به [auth.md](auth.md)).
|
||||
|
||||
### Response `200` (خروجی واقعی)
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"scope": "doctor",
|
||||
"staff": {
|
||||
"uuid": "c99320e2-257a-4d96-9b3a-7723fe198e79",
|
||||
"full_name": "زهرا احمدی",
|
||||
"job_title": "پرستار"
|
||||
},
|
||||
"owner": { "name": "09390039833" },
|
||||
"permissions": {
|
||||
"version": 1,
|
||||
"resources": { "services": { "view": true }, "appointments": { "view": true } }
|
||||
},
|
||||
"stats": { "today_appointments": 0, "services": 1 },
|
||||
"services": [
|
||||
{
|
||||
"uuid": "f9ffb607-f137-4ffb-8327-76427fd6fe55",
|
||||
"name": "سرم",
|
||||
"section_name": "تزریقات",
|
||||
"price_rials": 1000000,
|
||||
"duration_minutes": null
|
||||
}
|
||||
],
|
||||
"today_appointments": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| فیلد | نوع | توضیح |
|
||||
|------|-----|-------|
|
||||
| `scope` | `doctor` \| `clinic` | نوع محیطِ فعال |
|
||||
| `owner.name` | string | نام مطب/کلینیکِ مالک |
|
||||
| `services` | array | سرویسهای **فعالِ** تخصیصیافته به این پرسنل (`service_item_staff` و ستون legacy تکی) |
|
||||
| `today_appointments` | array | نوبتهای امروز با `appointments.staff_id` برابر این پرسنل — `uuid`, `patient_name`, `patient_mobile`, `slot_start`, `status` |
|
||||
| `permissions` | object | ثابت است و ویرایشپذیر نیست |
|
||||
|
||||
### Errors
|
||||
|
||||
| Code | HTTP | Description |
|
||||
|------|------|-------------|
|
||||
| `ERR_FORBIDDEN_001` | 403 | محیط کاری تنظیم نشده، یا ردیف پرسنل در آن محیط فعال نیست |
|
||||
| `ERR_AUTH_001` | 401 | بدون توکن |
|
||||
|
||||
خروجی واقعی حالت غیرفعال:
|
||||
```json
|
||||
{"success":false,"data":null,"errors":[{"code":"ERR_FORBIDDEN_001","message":"محیط کاری پرسنل تنظیم نشده"}]}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## GET /api/v1/admin/dashboard/charts
|
||||
|
||||
Returns time-series chart data for admin dashboard. All series are filtered to the given `from`–`to` window.
|
||||
|
||||
Reference in New Issue
Block a user