# Scaffold Feature — TestApp

Scaffolds a complete new feature module following **Clean Architecture** architecture with **BLoC / Cubit** state management.

## Usage
```
Create a feature called [feature_name] with [description]
```

## What gets generated

### For Clean Architecture architecture:
The AI will create all necessary files for the `[feature_name]` feature following Clean Architecture patterns.

### File structure to create:

**Clean Architecture:**
```
lib/features/[feature_name]/
  domain/
    entities/[feature_name].dart
    repositories/[feature_name]_repository.dart
    usecases/
      get_[feature_name]_usecase.dart
      create_[feature_name]_usecase.dart
  data/
    models/[feature_name]_dto.dart
    datasources/[feature_name]_remote_datasource.dart
    repositories/[feature_name]_repository_impl.dart
  presentation/
    [state_files]/         ← based on BLoC / Cubit
    pages/[feature_name]_page.dart
    widgets/
```

**Feature-First:**
```
lib/features/[feature_name]/
  [feature_name]_screen.dart
  [feature_name]_provider.dart    ← or [feature_name]_bloc.dart
  [feature_name]_repository.dart
  [feature_name]_model.dart
  widgets/
```

## State management boilerplate

### For BLoC / Cubit:
Generate the appropriate state management files with:
- Initial/loading/success/error states
- All necessary events (for BLoC)
- Repository connection
- Dependency injection registration

## Steps the AI takes
1. Ask: "What is the feature name and brief description?"
2. Ask: "What data does this feature manage? (e.g., list of products, single user profile)"
3. Generate all files with correct imports and patterns
4. Add the feature to the DI container
5. Add the route to GoRouter router
6. Create a placeholder test file

## Code generation
{{#if codegen_freezed}}
- Generate Freezed model: run `dart run build_runner build` after scaffolding
{{/if}}
{{#if codegen_injectable}}
- Register in injectable: add `@lazySingleton` to repository
{{/if}}
