# معماری — تسک ۰۱: راه‌اندازی پروژه ## ساختار پوشه‌های پروژه ``` clinic-pro-symfony/ ├── .ddev/ │ ├── config.yaml │ └── docker-compose.redis.yaml ├── config/ │ ├── packages/ │ │ ├── doctrine.yaml │ │ ├── lexik_jwt_authentication.yaml │ │ ├── nelmio_cors.yaml │ │ ├── framework.yaml │ │ ├── cache.yaml │ │ └── security.yaml │ ├── routes/ │ │ └── api.yaml │ └── services.yaml ├── src/ │ ├── Module/ │ │ ├── Auth/ │ │ ├── UserProfile/ │ │ ├── Blog/ │ │ ├── Doctor/ │ │ ├── Clinic/ │ │ ├── Agent/ │ │ ├── Category/ │ │ ├── AppointmentSettings/ │ │ ├── Appointment/ │ │ ├── Insurance/ │ │ ├── Rating/ │ │ ├── Comment/ │ │ ├── Like/ │ │ ├── Secretary/ │ │ ├── Payment/ │ │ └── Representation/ │ └── Shared/ │ ├── Response/ │ │ └── ApiResponse.php │ ├── Exception/ │ │ ├── ValidationException.php │ │ └── NotFoundException.php │ ├── Trait/ │ │ └── TimestampableTrait.php │ └── EventSubscriber/ │ └── ExceptionSubscriber.php ├── migrations/ ├── tests/ ├── public/ │ └── index.php └── .env ``` ## ساختار داخلی هر ماژول ``` src/Module/{ModuleName}/ ├── Controller/ │ └── {Name}Controller.php ← دریافت request، فراخوانی service، بازگشت response ├── Service/ │ └── {Name}Service.php ← منطق تجاری ├── Repository/ │ └── {Name}Repository.php ← کوئری‌های پایگاه داده ├── Entity/ │ └── {Name}.php ← Doctrine ORM mapping ├── DTO/ │ ├── Request/ │ │ └── Create{Name}Request.php ← validation ورودی │ └── Response/ │ └── {Name}Response.php ← شکل‌دهی خروجی JSON └── Voter/ └── {Name}Voter.php ← بررسی مجوزها ``` ## مسئولیت هر لایه | لایه | مسئولیت | |------|---------| | Controller | دریافت HTTP، اعتبارسنجی DTO، فراخوانی Service، بازگشت ApiResponse | | Service | منطق تجاری، فراخوانی Repository، dispatch Event | | Repository | تمام کوئری‌های Doctrine، بدون منطق تجاری | | Entity | تعریف ساختار جداول با ORM Attribute | | DTO | اعتبارسنجی ورودی و شکل‌دهی خروجی | | Voter | بررسی اینکه چه کسی به چه چیزی دسترسی دارد | ## فرمت استاندارد پاسخ (ApiResponse) > **⚠ فرمت رسمی از task.md است — این فایل با آن sync شده.** ### موفق (بدون صفحه‌بندی) ```json { "success": true, "data": { "..." } } ``` ### موفق (با صفحه‌بندی) ```json { "success": true, "data": [ "..." ], "meta": { "totalRecords": 47, "totalPages": 5, "currentPage": 1 } } ``` ### خطا ```json { "success": false, "data": null, "errors": [ { "code": "ERR_VALIDATION_001", "field": "mobile_number", "message": "فرمت شماره موبایل نادرست است" } ] } ``` ## نمودار ارتباط لایه‌ها ``` HTTP Request │ ▼ ┌─────────────┐ │ Controller │ ← Route, DTO bind, Validate └──────┬──────┘ │ ▼ ┌─────────────┐ │ Service │ ← Business logic, Events └──────┬──────┘ │ ▼ ┌─────────────┐ │ Repository │ ← Doctrine queries └──────┬──────┘ │ ▼ ┌─────────────┐ │ Entity │ ← Database row └─────────────┘ ```