# پایگاه داده — تسک ۰۱: راه‌اندازی پروژه ## موتور پایگاه داده MySQL 8.0 با موتور InnoDB و charset از نوع utf8mb4. DDEV به صورت پیش‌فرض MySQL 8 را فراهم می‌کند. ## قراردادهای کلی | قرارداد | توضیح | |---------|-------| | `id` | کلید اصلی auto-increment (فقط استفاده داخلی) | | `uuid` | شناسه عمومی UUID v4 (استفاده در API) | | `created_at` | زمان ایجاد (datetime_immutable) | | `updated_at` | زمان آخرین ویرایش (datetime_immutable) | | `deleted_at` | nullable — برای soft delete جداول مهم | | Foreign key | `ON DELETE CASCADE` یا `ON DELETE SET NULL` بسته به نیاز | ## پیکربندی DDEV برای پایگاه داده DDEV به طور خودکار MySQL 8 راه‌اندازی می‌کند: ```bash # اطلاعات اتصال از DDEV DB_HOST=db DB_PORT=3306 DB_NAME=db DB_USER=db DB_PASSWORD=db ``` در فایل `.env`: ```dotenv DATABASE_URL="mysql://db:db@db:3306/db?serverVersion=8.0&charset=utf8mb4" ``` ## Redis با DDEV ```yaml # .ddev/docker-compose.redis.yaml version: "3.6" services: redis: image: redis:7-alpine expose: - "6379" labels: com.ddev.site-name: ${DDEV_SITENAME} com.ddev.approot: ${DDEV_APPROOT} ``` ## استفاده از Redis | کاربرد | کلید | TTL | |--------|------|-----| | کد OTP | `otp:{mobile}` | ۱۲۰ ثانیه | | Rate limiting | `rate:{ip}:{endpoint}` | بسته به قانون | | JWT Blacklist (logout) | `jwt_blacklist:{jti}` | تا انقضای token | ## TimestampableTrait در همه Entity ها استفاده می‌شود: ```php // src/Shared/Trait/TimestampableTrait.php trait TimestampableTrait { #[ORM\Column(type: 'datetime_immutable')] private \DateTimeImmutable $createdAt; #[ORM\Column(type: 'datetime_immutable')] private \DateTimeImmutable $updatedAt; #[ORM\PrePersist] public function onPrePersist(): void { $this->createdAt = new \DateTimeImmutable(); $this->updatedAt = new \DateTimeImmutable(); } #[ORM\PreUpdate] public function onPreUpdate(): void { $this->updatedAt = new \DateTimeImmutable(); } } ``` ## استراتژی Migration - از `doctrine/doctrine-migrations-bundle` استفاده می‌شود - هر تسک migration فایل مخصوص خود را دارد - هرگز migration های قبلی ویرایش نشوند — همیشه فایل جدید بساز - دستور اجرا: ```bash ddev exec php bin/console doctrine:migrations:migrate ``` - دستور ساخت migration جدید: ```bash ddev exec php bin/console doctrine:migrations:diff ```