createRepositoryFiles method

void createRepositoryFiles(
  1. String featureName,
  2. String basePath
)

Implementation

void createRepositoryFiles(String featureName, String basePath) {
  final snakeCaseName = toSnakeCase(featureName);
  final classNamePrefix =
      featureName[0].toUpperCase() + featureName.substring(1);
  final packageName = getPackageName(basePath);

  // Domain repository interface
  final repositoryFile =
      File('$basePath/domain/repositories/${snakeCaseName}_repository.dart');
  if (!repositoryFile.existsSync()) {
    repositoryFile.writeAsStringSync('''
import 'package:dartz/dartz.dart';
import 'package:$packageName/core/error/failures.dart';
import 'package:$packageName/features/$featureName/domain/entities/$snakeCaseName.dart';

abstract class ${classNamePrefix}Repository {
Future<Either<Failure, $classNamePrefix>> get$classNamePrefix();
}
''');
    print('Created repository interface: ${snakeCaseName}_repository.dart');
  }

  // Data repository implementation
  final repositoryImplFile = File(
      '$basePath/data/repositories/${snakeCaseName}_repository_impl.dart');
  if (!repositoryImplFile.existsSync()) {
    repositoryImplFile.writeAsStringSync('''
import 'package:dartz/dartz.dart';
import 'package:$packageName/core/error/failures.dart';
import 'package:$packageName/features/$featureName/data/datasources/${snakeCaseName}_datasource.dart';
import 'package:$packageName/features/$featureName/domain/entities/$snakeCaseName.dart';
import 'package:$packageName/features/$featureName/domain/repositories/${snakeCaseName}_repository.dart';

class ${classNamePrefix}RepositoryImpl implements ${classNamePrefix}Repository {
final ${classNamePrefix}Datasource datasource;

${classNamePrefix}RepositoryImpl(this.datasource);

@override
Future<Either<Failure, $classNamePrefix>> get$classNamePrefix() async {
  try {
    final result = await datasource.get$classNamePrefix();
    return Right(result.toEntity());
  } on Exception {
    return Left(ServerFailure(message: "Something went wrong!"));
  }
}
}
''');
    print(
        'Created repository implementation: ${snakeCaseName}_repository_impl.dart');
  }
}