- Add SendSmsMessage class for encapsulating SMS message data. - Create KavehNegarProvider and RanginehProvider classes implementing SmsProviderInterface for sending SMS. - Implement SmsLogRepository and SmsTemplateRepository for managing SMS logs and templates. - Develop SendSmsHandler for handling SMS sending messages. - Create SmsService to manage SMS dispatching and logging. - Add UserProfileController for managing user profiles with CRUD operations. - Implement UserProfile entity and repository for user profile data management. - Update symfony.lock and bootstrap.php for project dependencies and environment setup.
100 lines
3.8 KiB
Markdown
100 lines
3.8 KiB
Markdown
# تسک ۱۲: ماژول امتیاز و نظرات
|
|
|
|
## توضیح
|
|
سیستم امتیازدهی (rate) و نظرات (comment) و لایک کاربران برای دکترها،
|
|
شامل تأیید نظرات توسط ادمین.
|
|
|
|
## Endpoint ها (واقعی از Drupal)
|
|
|
|
### امتیازدهی (Rate)
|
|
|
|
| متد | مسیر | توضیح | نیاز به Auth |
|
|
|-----|------|-------|-------------|
|
|
| POST | `/api/v1/clinicpro/rate` | ثبت امتیاز جدید | بله |
|
|
| PATCH | `/api/v1/clinicpro/rate/{uuid}` | ویرایش امتیاز | بله (Owner) |
|
|
| DELETE | `/api/v1/rate/doctor/{uuid}` | حذف امتیاز | بله (Admin) |
|
|
| GET | `/api/v1/clinicpro/rate/{uuid}` | امتیاز من برای دکتر | بله |
|
|
| GET | `/api/v1/clinicpro-comment/doctor-rate/{doctor_uuid}` | آمار کلی امتیازهای دکتر | خیر |
|
|
|
|
### نظرات (Comment)
|
|
|
|
| متد | مسیر | توضیح | نیاز به Auth |
|
|
|-----|------|-------|-------------|
|
|
| POST | `/api/v1/clinicpro/comment` | ثبت نظر جدید | بله |
|
|
| PATCH | `/api/v1/clinicpro/comment/{uuid}` | ویرایش نظر | بله (Owner/Admin) |
|
|
| DELETE | `/api/v1/clinicpro/comment/{uuid}` | حذف نظر | بله (Owner/Admin) |
|
|
| GET | `/api/v1/clinicpro/comment/{uuid}` | دریافت یک نظر | بله |
|
|
| GET | `/api/v1/clinicpro/comments/{doctorId}` | لیست نظرات دکتر (با page/limit) | بله |
|
|
| GET | `/api/v1/clinicpro/unverified-comments/{doctorId}` | نظرات تأییدنشده (با page/limit) | بله (Admin) |
|
|
| PATCH | `/api/v1/clinicpro/unverified-comments/{commentId}` | تأیید/رد نظر | بله (Admin) |
|
|
|
|
### لایک (Like)
|
|
|
|
| متد | مسیر | توضیح | نیاز به Auth |
|
|
|-----|------|-------|-------------|
|
|
| POST | `/api/v1/clinicpro/like` | ثبت لایک/دیسلایک | بله |
|
|
| PATCH | `/api/v1/clinicpro/like/{uuid}` | ویرایش لایک | بله (Owner) |
|
|
|
|
## پیشنیازها
|
|
- تسک ۰۱، ۰۲، ۰۵ (Doctor)
|
|
|
|
## زمان تخمینی
|
|
۸ تا ۱۰ ساعت
|
|
|
|
---
|
|
|
|
## ⚠ نام فیلدهای Request (متفاوت از DB!)
|
|
|
|
| فیلد در Request | معادل در DB | توضیح |
|
|
|----------------|------------|-------|
|
|
| `correct_diagnosis` | `accuracy_of_diagnosis` | دقت تشخیص (0-100) |
|
|
| `doctor_skill` | `doctor_expertise` | مهارت پزشک (0-100) |
|
|
| `behavior_doctor` | `doctor_behavior` | برخورد پزشک (0-100) |
|
|
| `office_cleaning` | `clinic_cleanliness` | نظافت مطب (0-100) |
|
|
| `time_in_office` | `waiting_time_at_clinic` | زمان انتظار (0-100) |
|
|
| `doctor` | `doctor_id` | شناسه دکتر |
|
|
| `rate` | `starts` | امتیاز ستاره (ذخیره محاسبهشده) |
|
|
|
|
---
|
|
|
|
## نمونه واقعی Request — POST /api/v1/clinicpro/rate
|
|
```json
|
|
{
|
|
"correct_diagnosis": 100,
|
|
"doctor_skill": 100,
|
|
"behavior_doctor": 100,
|
|
"office_cleaning": 100,
|
|
"time_in_office": 100,
|
|
"doctor": 1,
|
|
"rate": 2
|
|
}
|
|
```
|
|
|
|
## نمونه واقعی Request — PATCH /api/v1/clinicpro/rate/{uuid}
|
|
```json
|
|
{
|
|
"correct_diagnosis": 50,
|
|
"doctor_skill": 60,
|
|
"behavior_doctor": 70,
|
|
"office_cleaning": 80,
|
|
"time_in_office": 90,
|
|
"doctor": 1,
|
|
"rate": 2
|
|
}
|
|
```
|
|
|
|
## نمونه واقعی Request — PATCH /api/v1/clinicpro/unverified-comments/{uuid}
|
|
_(تأیید نظر — بدنه خالی یا فقط `approved`)_
|
|
```json
|
|
{}
|
|
```
|
|
|
|
---
|
|
|
|
## نکات مهم
|
|
- هر کاربر فقط **یک امتیاز** برای هر دکتر میتواند ثبت کند (UNIQUE user_id + doctor_id)
|
|
- نظرات با `approved=0` ذخیره میشوند و باید توسط ادمین تأیید شوند
|
|
- لایک فقط برای **نظرات** است (نه بلاگ یا دکتر)
|
|
- هر کاربر فقط **یک لایک** برای هر نظر میتواند ثبت کند
|
|
- URL کامنتهای تأییدنشده: `{doctorId}` در URL است اما فقط ROLE_ADMIN بررسی میشود
|