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

2.3 KiB

پایگاه داده — تسک ۰۴: ماژول بلاگ

ساختار واقعی از 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)

ایندکس‌ها

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 = پیش‌نویس