# LBA App - Clean Architecture

## 📁 معماری پروژه

این پروژه بر اساس **Clean Architecture** و **BLoC Pattern** پیاده‌سازی شده است.

```
lib/
├── core/                          # کتابخانه‌های مشترک
│   ├── error/
│   │   └── failures.dart         # تعریف خطاها
│   └── usecases/
│       └── usecase.dart          # Base class برای Use Cases
├── features/                      # فیچرهای اپلیکیشن
│   └── auth/                     # فیچر احراز هویت
│       ├── data/                 # Data Layer
│       │   ├── datasources/
│       │   │   └── auth_remote_data_source.dart
│       │   ├── models/
│       │   │   └── otp_response_model.dart
│       │   └── repositories/
│       │       └── auth_repository_impl.dart
│       ├── domain/               # Domain Layer (Business Logic)
│       │   ├── entities/
│       │   │   └── otp_response.dart
│       │   ├── repositories/
│       │   │   └── auth_repository.dart
│       │   └── usecases/
│       │       ├── send_otp.dart
│       │       └── verify_otp.dart
│       └── presentation/         # Presentation Layer (UI)
│           ├── bloc/
│           │   ├── auth_bloc.dart
│           │   ├── auth_event.dart
│           │   └── auth_state.dart
│           ├── pages/
│           │   ├── onboarding_page.dart
│           │   ├── login_page.dart
│           │   └── otp_verification_page.dart
│           └── widgets/          # ویجت‌های مخصوص این فیچر
├── injection_container.dart      # Dependency Injection
└── main.dart                     # Entry Point
```

## 🏗️ لایه‌های معماری

### 1. **Domain Layer (Business Logic)**
- **Entities**: اشیاء اصلی کسب‌وکار
- **Use Cases**: منطق کسب‌وکار
- **Repository Interfaces**: تعریف قراردادها

### 2. **Data Layer**
- **Models**: تبدیل داده‌ها
- **Data Sources**: منابع داده (API, Local DB)
- **Repository Implementation**: پیاده‌سازی Repository ها

### 3. **Presentation Layer (UI)**
- **BLoC**: مدیریت State
- **Pages**: صفحات اپلیکیشن
- **Widgets**: کامپوننت‌های UI

## 🔧 Dependency Injection

از یک Service Locator ساده استفاده شده:

```dart
// در main.dart
sl.init();

// استفاده در UI
BlocProvider(
  create: (context) => sl.authBloc,
  child: MyApp(),
)
```

## 🚀 وضعیت فعلی

### ✅ پیاده‌سازی شده:
- معماری Clean Architecture
- BLoC Pattern
- Mock Data برای تست
- Auth Feature (SendOTP, VerifyOTP)

### 🔄 آماده برای:
- اضافه کردن API واقعی
- اضافه کردن فیچرهای جدید
- تست‌نویسی
- بهبود UI/UX

## 📱 استفاده

### اجرای اپ:
```bash
flutter run
```

### اضافه کردن فیچر جدید:
1. پوشه جدید در `features/`
2. پیاده‌سازی لایه‌های `domain`, `data`, `presentation`
3. اضافه کردن به `injection_container.dart`

## 🎯 مزایای این معماری:

1. **مقیاس‌پذیری**: آسان برای اضافه کردن فیچرهای جدید
2. **تست‌پذیری**: جداسازی لایه‌ها
3. **نگهداری**: کد منظم و قابل فهم
4. **انعطاف‌پذیری**: تغییر آسان منابع داده
5. **استقلال**: لایه‌ها مستقل از یکدیگر

## 🔗 وابستگی‌ها

فعلاً تنها از پکیج‌های اصلی Flutter استفاده شده و نیاز به پکیج خارجی نیست.
