# پایگاه داده — تسک ۱۲: ماژول امتیاز و نظرات ## مهم: نام فیلد از DB فیلد ستاره در Drupal **`field_starts`** است (نه `field_stars`!) — از config تأیید شد. ## جدول: ratings _(entity_type=clinic_pro_comment, bundle=rate)_ | ستون | نوع | نام Drupal | توضیح | |------|-----|-----------|-------| | id | INT UNSIGNED AUTO_INCREMENT PK | id | | | uuid | CHAR(36) UNIQUE NOT NULL | uuid | | | user_id | INT FK → users.id NOT NULL | uid | امتیاز‌دهنده | | doctor_id | INT FK → doctors.id NOT NULL | field_doctor_id | entity ref → clinic_pro | | doctor_behavior | INT NOT NULL | field_doctor_behavior | برخورد مناسب (0-100) | | accuracy_of_diagnosis | INT NOT NULL | field_accuracy_of_diagnosis | تشخیص درست (0-100) | | waiting_time_at_clinic | INT NOT NULL | field_waiting_time_at_clinic | زمان انتظار (0-100) | | doctor_expertise | INT NOT NULL | field_doctor_expertise | مهارت (0-100) | | clinic_cleanliness | INT NOT NULL | field_clinic_cleanliness | نظافت (0-100) | | starts | DECIMAL(10,2) NOT NULL | field_starts | ستاره محاسبه‌شده (0-5) — ⚠️ `starts` نه `stars`! | | percent | FLOAT NOT NULL | field_percent | درصد محاسبه‌شده (0-100) | | created_at | INT NOT NULL | created | Unix timestamp | | updated_at | INT NOT NULL | changed | Unix timestamp | ## جدول: comments _(entity_type=clinic_pro_comment, bundle=comments)_ | ستون | نوع | نام Drupal | توضیح | |------|-----|-----------|-------| | id | INT UNSIGNED AUTO_INCREMENT PK | id | | | uuid | CHAR(36) UNIQUE NOT NULL | uuid | | | user_id | INT FK → users.id NOT NULL | uid | نویسنده | | doctor_id | INT FK → doctors.id NOT NULL | field_doctor_id | دکتر | | comment | LONGTEXT NOT NULL | field_comment | متن نظر | | approved | TINYINT(1) DEFAULT 0 | field_approved | تأیید شده (نه ENUM بلکه boolean) | | parent_id | INT FK → comments.id NULL | field_parent | نظر پدر (پاسخ به نظر) | | created_at | INT NOT NULL | created | Unix timestamp | | updated_at | INT NOT NULL | changed | Unix timestamp | ## جدول: likes _(entity_type=clinic_pro_comment, bundle=like)_ | ستون | نوع | نام Drupal | توضیح | |------|-----|-----------|-------| | id | INT UNSIGNED AUTO_INCREMENT PK | id | | | uuid | CHAR(36) UNIQUE NOT NULL | uuid | | | user_id | INT FK → users.id NOT NULL | uid | کاربر | | comment_id | INT FK → comments.id NOT NULL | field_comment_id | نظر مورد لایک | | is_like | TINYINT(1) NOT NULL | field_like | لایک (1) یا دیس‌لایک (0) | | created_at | INT NOT NULL | created | Unix timestamp | | updated_at | INT NOT NULL | changed | Unix timestamp | ## ایندکس‌ها ```sql -- هر کاربر فقط یک امتیاز برای هر دکتر CREATE UNIQUE INDEX idx_ratings_user_doctor ON ratings(user_id, doctor_id); -- هر کاربر فقط یک لایک/دیس‌لایک برای هر نظر CREATE UNIQUE INDEX idx_likes_user_comment ON likes(user_id, comment_id); CREATE INDEX idx_ratings_doctor ON ratings(doctor_id); CREATE INDEX idx_comments_doctor_approved ON comments(doctor_id, approved); CREATE INDEX idx_comments_parent ON comments(parent_id); ``` ## نکته‌های مهم - فیلد ستاره `starts` است (نه `stars`) — همان‌طور که در config تأیید شد - `approved` boolean است (0/1)، نه ENUM - `percent` نوع FLOAT است (نه DECIMAL) — از config تأیید شد - `starts` نوع DECIMAL(10,2) است — از config تأیید شد - `comment.status` در جدول پایه Drupal وجود دارد (tinyint) اما از `field_approved` استفاده می‌شود