- 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.
95 lines
2.7 KiB
Markdown
95 lines
2.7 KiB
Markdown
# پایگاه داده — تسک ۰۱: راهاندازی پروژه
|
|
|
|
## موتور پایگاه داده
|
|
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
|
|
```
|