- 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.
51 lines
2.3 KiB
Markdown
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` = پیشنویس
|