Files
clinicpro/docs/tasks/task-04-blog/database.md
T
hamed de1a78a235 feat: Implement SMS sending functionality with KavehNegar and Rangineh providers
- 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.
2026-06-09 22:00:34 +03:30

51 lines
2.3 KiB
Markdown

# پایگاه داده — تسک ۰۴: ماژول بلاگ
## ساختار واقعی از DB backup
جدول `blog` در Drupal base fields را دارد + ۳ custom field:
## جدول: blogs
_(entity_type=blog — از DB backup تأیید شده)_
| ستون | نوع | نام Drupal | توضیح |
|------|-----|-----------|-------|
| id | INT UNSIGNED AUTO_INCREMENT PK | id | |
| uuid | CHAR(36) UNIQUE NOT NULL | uuid | |
| user_id | INT FK → users.id NOT NULL | uid | نویسنده |
| title | VARCHAR(255) NULL | label | عنوان (base field Drupal) |
| slug | VARCHAR(300) UNIQUE NOT NULL | — | اضافه‌شده در Symfony (در Drupal نیست!) |
| body | LONGTEXT NULL | description__value | محتوا (HTML) |
| status | TINYINT(1) DEFAULT 0 | status | منتشرشده/پیش‌نویس |
| is_top | TINYINT(1) DEFAULT 0 | field_top | نمایش در صفحه اول |
| image_id | INT FK → files.id NULL | field_image | تصویر شاخص (entity ref → file) |
| created_at | INT NOT NULL | created | Unix timestamp |
| updated_at | INT NOT NULL | changed | Unix timestamp |
## جدول: blog_tags (ManyToMany)
| ستون | نوع | نام Drupal | توضیح |
|------|-----|-----------|-------|
| blog_id | INT FK → blogs.id CASCADE | | |
| category_id | INT FK → categories.id CASCADE | field_tag | تگ/دسته‌بندی (entity ref → category/tag bundle) |
## نمونه داده واقعی از DB backup
```
id=14, label='روش های خانگی محافظت از پوست در تابستان', uid=22, status=1
id=15, 16, ... (22 مطلب)
field_image: target_id=97 (file entity)
```
## ایندکس‌ها
```sql
CREATE INDEX idx_blogs_status ON blogs(status);
CREATE INDEX idx_blogs_user ON blogs(user_id);
CREATE INDEX idx_blogs_created ON blogs(created_at DESC);
CREATE INDEX idx_blogs_top ON blogs(is_top);
CREATE UNIQUE INDEX idx_blogs_slug ON blogs(slug);
```
## نکات مهم
- `slug` در Drupal وجود ندارد — در Symfony باید auto-generate شود از `title`
- `image` در Drupal یک entity reference به file/media است — در Symfony مسیر فایل ذخیره می‌شود
- `body` در Drupal با نام `description__value` ذخیره می‌شود (base field)
- `status=1` = منتشرشده، `status=0` = پیش‌نویس