feat: enhance /oauth/userinfo endpoint to include primary_role and context in response
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
|
||||
| Endpoint | داکیومنت | توضیح |
|
||||
|----------|----------|-------|
|
||||
| `GET /oauth/userinfo` | [auth.md](../docs/api/auth.md) | اطلاعات پایه کاربر — بدون `primary_role` و `context` |
|
||||
| `GET /oauth/userinfo` | [auth.md](../docs/api/auth.md) | اطلاعات کاربر — باید `primary_role` و `context` به آن اضافه شود |
|
||||
| `GET /api/v1/admin/dashboard/stats` | [admin.md](../docs/api/admin.md) | KPI های داشبورد ادمین |
|
||||
| `GET /api/v1/admin/dashboard/charts` | [admin.md](../docs/api/admin.md) | نمودار ۳۰ روزه ادمین |
|
||||
| `GET /api/v1/admin/dashboard/recent` | [admin.md](../docs/api/admin.md) | آخرین فعالیتها برای ادمین |
|
||||
@@ -29,11 +29,16 @@
|
||||
| `GET /api/v1/clinics/{uuid}` | [clinic.md](../docs/api/clinic.md) | جزئیات کلینیک |
|
||||
| `GET /api/v1/admin/clinics` | [admin.md](../docs/api/admin.md) | لیست کلینیکها — فقط ROLE_ADMIN |
|
||||
|
||||
### تغییر روی API موجود
|
||||
|
||||
| Endpoint | فایل | توضیح |
|
||||
|----------|------|-------|
|
||||
| `GET /oauth/userinfo` | `src/Auth/Controller/AuthController.php` | اضافه کردن `primary_role` و `context` به پاسخ موجود |
|
||||
|
||||
### API های جدید که باید ساخته شوند
|
||||
|
||||
| Endpoint | فایل کنترلر | توضیح |
|
||||
|----------|-------------|-------|
|
||||
| `GET /api/v1/me` | `src/Auth/Controller/MeController.php` | شناسایی نقش + context کاربر |
|
||||
| `GET /api/v1/dashboard/clinic` | `src/Dashboard/Controller/DashboardController.php` | داشبورد صاحب کلینیک |
|
||||
| `GET /api/v1/dashboard/doctor` | همان | داشبورد دکتر |
|
||||
| `GET /api/v1/dashboard/secretary` | همان | داشبورد منشی |
|
||||
@@ -72,29 +77,42 @@
|
||||
|
||||
---
|
||||
|
||||
## مرحله ۱ — endpoint شناسایی کاربر (بکاند) — API جدید
|
||||
## مرحله ۱ — گسترش `/oauth/userinfo` (بکاند)
|
||||
|
||||
### فایل جدید: `src/Auth/Controller/MeController.php`
|
||||
### فایل: `src/Auth/Controller/AuthController.php`
|
||||
|
||||
```
|
||||
GET /api/v1/me [IS_AUTHENTICATED_FULLY]
|
||||
```
|
||||
endpoint موجود `/oauth/userinfo` را گسترش بده — همان route، همان permission، فقط دو فیلد جدید به پاسخ اضافه میشود.
|
||||
|
||||
> این endpoint با `/oauth/userinfo` فرق دارد — علاوه بر اطلاعات پایه، `primary_role` و `context` (مثل uuid دکتر/کلینیک) را هم برمیگرداند.
|
||||
|
||||
پاسخ:
|
||||
پاسخ فعلی:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"id": 4766,
|
||||
"uuid": "...",
|
||||
"mobile": "09...",
|
||||
"name": "دکتر علی ...",
|
||||
"mobile_number": "09...",
|
||||
"realName": "دکتر وحید درویشی",
|
||||
"status": 1,
|
||||
"roles": ["ROLE_USER", "ROLE_DOCTOR"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
پاسخ بعد از تغییر (دو فیلد جدید اضافه):
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"id": 4766,
|
||||
"uuid": "...",
|
||||
"mobile_number": "09...",
|
||||
"realName": "دکتر وحید درویشی",
|
||||
"status": 1,
|
||||
"roles": ["ROLE_USER", "ROLE_DOCTOR"],
|
||||
"primary_role": "doctor",
|
||||
"context": {
|
||||
"doctor_uuid": "...",
|
||||
"doctor_name": "دکتر علی احمدی"
|
||||
"doctor_name": "دکتر وحید درویشی"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -110,7 +128,7 @@ GET /api/v1/me [IS_AUTHENTICATED_FULLY]
|
||||
**پر کردن `context`**:
|
||||
- `ROLE_DOCTOR`: از `DoctorRepository::findByUser($user)` → `{doctor_uuid, doctor_name}`
|
||||
- `ROLE_CLINIC`: از `ClinicRepository::findByUser($user)` → `{clinic_uuid, clinic_name, clinic_logo}`
|
||||
- `ROLE_SECRETARY`: از `DoctorSecretaryRepository::findActiveBySecretary($user)` (متد جدید) → `{doctor_uuid, doctor_name, secretary_uuid, permissions}`
|
||||
- `ROLE_SECRETARY`: از `DoctorSecretaryRepository::findActiveBySecretary($user)` (متد جدید) → `{secretary_uuid, doctor_uuid, doctor_name, permissions}`
|
||||
- اگر موجودیت پیدا نشد: `context: null`
|
||||
|
||||
**متد جدید در `DoctorSecretaryRepository`**:
|
||||
@@ -121,7 +139,7 @@ public function findActiveBySecretary(User $user): ?DoctorSecretary
|
||||
}
|
||||
```
|
||||
|
||||
**داکیومنت**: بعد از پیادهسازی، endpoint را به `docs/api/auth.md` اضافه کن.
|
||||
**داکیومنت**: بعد از پیادهسازی، پاسخ `/oauth/userinfo` را در `docs/api/auth.md` بهروز کن.
|
||||
|
||||
---
|
||||
|
||||
@@ -142,9 +160,9 @@ interface AuthState {
|
||||
}
|
||||
```
|
||||
|
||||
- متد `login(token, refreshToken)`: بعد از ذخیره token، یک `GET /api/v1/me` بزند و نتیجه را ذخیره کند
|
||||
- متد `login(token, refreshToken)`: بعد از ذخیره token، یک `GET /oauth/userinfo` بزند و نتیجه را ذخیره کند
|
||||
- متد `logout()`: همه فیلدها را پاک کند
|
||||
- متد جدید `fetchMe()`: `GET /api/v1/me` و update store — در `App.tsx` هنگام mount فراخوانی شود (اگر token موجود بود اما `primaryRole` خالی بود، تا بعد از reload صفحه role بازیابی شود)
|
||||
- متد جدید `fetchMe()`: `GET /oauth/userinfo` و update store — در `App.tsx` هنگام mount فراخوانی شود (اگر token موجود بود اما `primaryRole` خالی بود، تا بعد از reload صفحه role بازیابی شود)
|
||||
|
||||
---
|
||||
|
||||
@@ -479,7 +497,7 @@ const endpoint = primaryRole === 'admin'
|
||||
|
||||
### ترتیب اجرا (پیشنهادی)
|
||||
1. `DoctorSecretaryRepository::findActiveBySecretary()` — متد جدید
|
||||
2. `MeController` — بکاند، تست با curl
|
||||
2. `AuthController::userInfo()` — گسترش برای `primary_role` + `context`، تست با curl
|
||||
3. `authStore.ts` — اضافه کردن fetchMe + فیلدهای جدید
|
||||
4. `App.tsx` — fetchMe در mount
|
||||
5. `DashboardController` — هر سه endpoint
|
||||
@@ -496,14 +514,14 @@ const endpoint = primaryRole === 'admin'
|
||||
|
||||
## خلاصه فایلهای جدید/تغییریافته
|
||||
|
||||
### بکاند (تغییر)
|
||||
- `src/Auth/Controller/AuthController.php` — گسترش `userInfo()`: اضافه کردن `primary_role` و `context`
|
||||
- `src/Secretary/Repository/DoctorSecretaryRepository.php` — اضافه: `findActiveBySecretary()`
|
||||
|
||||
### بکاند (جدید)
|
||||
- `src/Auth/Controller/MeController.php`
|
||||
- `src/Dashboard/Controller/DashboardController.php`
|
||||
- `src/Appointment/Controller/MyAppointmentsController.php`
|
||||
|
||||
### بکاند (تغییر)
|
||||
- `src/Secretary/Repository/DoctorSecretaryRepository.php` — اضافه: `findActiveBySecretary()`
|
||||
|
||||
### فرانتاند (تغییر)
|
||||
- `assets/admin/stores/authStore.ts` — اضافه: primaryRole، context، fetchMe()
|
||||
- `assets/admin/App.tsx` — اضافه: RoleRoute، fetchMe در mount، route های جدید
|
||||
|
||||
Reference in New Issue
Block a user