- 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.
2.7 KiB
2.7 KiB
پایگاه داده — تسک ۰۱: راهاندازی پروژه
موتور پایگاه داده
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 راهاندازی میکند:
# اطلاعات اتصال از DDEV
DB_HOST=db
DB_PORT=3306
DB_NAME=db
DB_USER=db
DB_PASSWORD=db
در فایل .env:
DATABASE_URL="mysql://db:db@db:3306/db?serverVersion=8.0&charset=utf8mb4"
Redis با DDEV
# .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 ها استفاده میشود:
// 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 های قبلی ویرایش نشوند — همیشه فایل جدید بساز
- دستور اجرا:
ddev exec php bin/console doctrine:migrations:migrate
- دستور ساخت migration جدید:
ddev exec php bin/console doctrine:migrations:diff