# تسک ۰۵: ماژول دکتر ## توضیح پیاده‌سازی مدیریت پروفایل دکترها، لیست دکترها با فیلتر، آپلود تصویر پروفایل و مدیریت آدرس‌های مطب. ## Endpoint ها (واقعی از Drupal) | متد | مسیر | توضیح | نیاز به Auth | |-----|------|-------|-------------| | POST | `/api/v1/doctor` | ایجاد پروفایل دکتر | بله | | PATCH | `/api/v1/doctor/{uuid}` | ویرایش پروفایل دکتر | بله (Owner/Admin) | | DELETE | `/api/v1/doctor/{uuid}` | حذف دکتر | بله (Admin) | | GET | `/api/v1/doctor/{uuid}` | دریافت پروفایل کامل دکتر | خیر | | GET | `/api/v1/doctors` | لیست دکترها با فیلتر | خیر | | POST | `/file/upload/clinic_pro/doctor/field_image` | آپلود تصویر پروفایل دکتر | بله | | GET | `/api/v1/clinic/doctor-list/{clinic_uuid}` | لیست دکترهای یک کلینیک | خیر | | POST | `/api/v1/clinic-pro/doctor-address` | ایجاد آدرس مطب | بله | | PATCH | `/api/v1/clinic-pro/doctor-address/{id}` | ویرایش آدرس | بله | | DELETE | `/api/v1/clinic-pro/doctor-address/{id}` | حذف آدرس | بله | | GET | `/api/v1/clinic-pro/doctor-address/{id}` | دریافت یک آدرس | بله | | GET | `/api/v1/clinic-pro/doctor-addresses/{doctorId}` | لیست آدرس‌های دکتر | خیر | ## پیش‌نیازها - تسک ۰۱، ۰۲، ۰۸ (Categories برای تخصص و سرویس‌ها) ## زمان تخمینی ۸ تا ۱۰ ساعت --- ## نمونه واقعی Response — GET /api/v1/doctor/{uuid} ```json { "id": "29", "uuid": "61be915b-595a-42e5-bca5-f80d22f4f14a", "name": "single doctor", "gender": "woman", "experience": 21, "activity_time": "1107808200", "medical_system_code": "121212121212", "detail": "test", "degree": "specialist", "specialties": [ { "uuid": "d60a269d-f7d7-4589-8eab-451e6f740d40", "id": "603", "name": "داخلی عمومی", "parent": "602" } ], "img": [ { "url": "https://domain.com/sites/default/files/doctors/2025-11/image.png", "fid": "98", "filename": "image.png", "filemime": "image/png", "filesize": 173665 } ], "expertise": [ { "uuid": "...", "id": "1601", "name": "معاینه و تشخیص پزشک متخصص" }, { "uuid": "...", "id": "1602", "name": "ویزیت تخصصی" } ], "satisfaction": "60", "point": "3.5", "free_turn": "اولین نوبت آزاد: سه‌شنبه 19 خرداد ساعت 15:00", "hours_of_work": "از شنبه تا چهارشنبه از ساعت 08:00 تا 18:00", "address": [ { "id": "39", "uuid": "7b759d2a-af8a-4730-8eb0-e77dcd3a724e", "name": "مطب اصلی", "map": { "latitude": "53.121212", "longitude": "57.121212" }, "address": "آدرس کامل مطب", "telephone": "09120671756" } ], "average_rate": { "total_rates": null }, "state": [{ "uuid": "...", "id": "23", "name": "کهگیلویه و بویراحمد" }], "city": [{ "uuid": "...", "id": "123", "name": "یاسوج", "parent": "23" }] } ``` > **توجه فیلدها:** > - `img` (نه `image` یا `images`!) — آرایه با url/fid/filename/filemime/filesize > - `specialties` → تخصص اصلی + والد > - `expertise` → همان doctor_services > - `satisfaction` و `point` به صورت **string** برگردانده می‌شوند > - `free_turn` → متن محاسبه‌شده از برنامه هفتگی (مثلاً "نوبت آزادی موجود نیست") > - `hours_of_work` → متن محاسبه‌شده از برنامه هفتگی > - `average_rate.total_rates` → می‌تواند null باشد > - `experience` → محاسبه‌شده از `activity_time` (Unix timestamp شروع فعالیت) --- ## فیلترهای GET /api/v1/doctors | پارامتر | نوع | الزامی | مثال | |---------|-----|--------|------| | `state` | string | بله | `31` | | `city` | string | بله | `62` | | `specialty` | string | خیر | `503` | | `gender` | string | خیر | `man` یا `woman` | | `degree` | string | خیر | `general`, `specialist`, `expert`, `subspecialistplus` | | `name` | string | خیر | `علی` | | `active` | array | خیر | `0` یا `1` | | `page` | string | خیر | `1` | | `limit` | string | خیر | `10` | | `sort` | string | خیر | `ASC` یا `DESC` | ## نمونه Response لیست دکترها ```json { "data": [ { "id": "29", "uuid": "...", "name": "single doctor", "gender": "woman", "degree": "specialist", "img": [{ "url": "...", "fid": "98", "filename": "image.png", "filemime": "image/png", "filesize": 173665 }], "specialties": [{ "uuid": "...", "id": "603", "name": "داخلی عمومی", "parent": "602" }], "satisfaction": "60", "point": "3.5", "free_turn": "اولین نوبت آزاد: سه‌شنبه 19 خرداد ساعت 15:00", "hours_of_work": "از شنبه تا چهارشنبه از ساعت 08:00 تا 18:00", "active": true } ], "page": { "totalRecords": 7, "totalPages": 1, "currentPage": 1 } } ``` --- ## PATCH /api/v1/doctor/{uuid} — فیلدهای قابل ویرایش ```json { "title": "نام دکتر", "doctor_services": ["اکوکاردیوگرافی", "ویزیت تخصصی"] } ``` --- ## آپلود تصویر دکتر — POST /file/upload/clinic_pro/doctor/field_image ``` Headers: Content-Type: application/octet-stream Content-Disposition: file; filename="doctor.png" X-CSRF-Token: {token} Authorization: Bearer {token} Body: binary file content Response → { fid, uuid, ... } که در PATCH doctor استفاده می‌شود ``` --- ## نمونه واقعی Response — GET /api/v1/clinic-pro/doctor-address/{id} ```json { "id": "39", "uuid": "7b759d2a-af8a-4730-8eb0-e77dcd3a724e", "name": "مطب اصلی", "map": { "latitude": "53.121212", "longitude": "57.121212" }, "address": "آذربايجان غربي، مياندوآب، خيابان ۱۵ خرداد، برج ماندگار", "telephone": "09120671756" } ```