generateRepository method

Future<void> generateRepository(
  1. String name
)

Generates repository interface and implementation following Clean Architecture.

name - The name of the repository to generate (e.g., 'user', 'auth').

Creates both abstract repository interface and concrete implementation:

  • Abstract repository in lib/shared/repositories/ (domain layer)
  • Concrete implementation in lib/shared/repositories/implementations/ (data layer)
  • Proper dependency inversion with interface segregation
  • Error handling and type safety
  • Remote data source integration patterns

Example:

await fileGenerator.generateRepository('user');
// Creates: 
//   lib/shared/repositories/user_repository.dart
//   lib/shared/repositories/implementations/user_repository_impl.dart

Implementation

Future<void> generateRepository(String name) async {
  final snakeName = templateGenerator.toSnakeCase(name);

  // For standalone repository generation, we'll put it in shared folders
  await ensureDirectoryExists('lib/shared/repositories');
  await ensureDirectoryExists('lib/shared/repositories/implementations');

  final files = {
    'lib/shared/repositories/${snakeName}_repository.dart':
        templateGenerator.generateRepositoryInterface(name),
    'lib/shared/repositories/implementations/${snakeName}_repository_impl.dart':
        templateGenerator.generateRepositoryImplementation(name),
  };

  for (final entry in files.entries) {
    await writeFile(entry.key, entry.value);
  }

  print('✅ Generated repository "$name" with files:');
  for (final filePath in files.keys) {
    print('  - $filePath');
  }
  print('💡 Note: Repository generated in shared folder. For feature-specific repositories, use "flx gen feature <name>"');
}