runFeature function

Future<void> runFeature(
  1. String featureName
)

Implementation

Future<void> runFeature(String featureName) async {
  print('Creando estructura para la funcionalidad: $featureName...');

  Future<void> crearArchivo(String ruta, String contenido) async {
    final archivo = File(ruta);
    await archivo.create(recursive: true);
    await archivo.writeAsString(contenido);
    print('Creado: $ruta');
  }

  await Directory('lib/features/$featureName/infrastructure/datasources')
      .create(recursive: true);
  await crearArchivo(
      'lib/features/$featureName/infrastructure/datasources/${featureName}_datasources.dart',
      '''
//
abstract class DataSource {
  // ...
}

class DataSourceImpl implements DataSource {
  // ...
}
''');

  await Directory('lib/features/$featureName/infrastructure/models')
      .create(recursive: true);
  await crearArchivo(
      'lib/features/$featureName/infrastructure/models/${featureName}_models.dart',
      '''
//
import "../../domain/entities/${featureName}_entities.dart";

class Model extends Entity {
    // ...
}
''');

  await Directory('lib/features/$featureName/infrastructure/repositories_impl')
      .create(recursive: true);
  await crearArchivo(
      'lib/features/$featureName/infrastructure/repositories_impl/${featureName}_repositories_impl.dart',
      '''
//
import "../datasources/${featureName}_datasources.dart";
import "../../domain/repositories/${featureName}_repositories.dart";

class RepositoryImp implements Repository {
    final DataSource dataSource;

    RepositoryImp({required this.dataSource});
}
''');

  await Directory('lib/features/$featureName/domain/entities')
      .create(recursive: true);
  await crearArchivo(
      'lib/features/$featureName/domain/entities/${featureName}_entities.dart',
      '''
//
class Entity {
    // ...
}
''');

  await Directory('lib/features/$featureName/domain/repositories')
      .create(recursive: true);
  await crearArchivo(
      'lib/features/$featureName/domain/repositories/${featureName}_repositories.dart',
      '''
//
abstract class Repository {
  // ...
}
''');

  await Directory('lib/features/$featureName/domain/usecases')
      .create(recursive: true);
  await crearArchivo(
      'lib/features/$featureName/domain/usecases/${featureName}_usecases.dart',
      '''
//
import "../repositories/${featureName}_repositories.dart";

class UseCase {
    final Repository repository;

    UseCase({required this.repository});
}
''');

  await Directory('lib/features/$featureName/presentation/pages')
      .create(recursive: true);
  await Directory('lib/features/$featureName/presentation/widgets')
      .create(recursive: true);

  print('¡Estructura de feature creada!');
}