createDataRepository method
void
createDataRepository()
Implementation
void createDataRepository(
String pathPage,
String pageName,
String apiName,
String method,
bool bodyList,
bool responseList,
) {
final apiClassName = apiName.pascalCase;
final apiMethodName = apiName.camelCase;
final path = join(pathPage, 'data', 'repositories');
DirectoryHelper.createDir(path);
final bodyClass = getBodyClass(apiClassName, bodyList);
final entityClass = getEntityClass(apiClassName, responseList);
final entityImpl = getEntityReturn(apiClassName, responseList);
final methodOfDataRepository = '''@override
${whenMethod(
method,
onStream: () {
return '''${flutterClassOfMethod(method)}<Either<MorphemeFailure, $entityClass>> $apiMethodName($bodyClass body,{Map<String, String>? headers,}) async* {
try {
final response = remoteDataSource.$apiMethodName(
body,
headers: headers,
);
await for (final data in response) {
yield Right($entityImpl);
}
} on MorphemeException catch (e) {
yield Left(e.toMorphemeFailure());
} catch (e) {
yield Left(InternalFailure(e.toString()));
}
}''';
},
onFuture: () {
return '''${flutterClassOfMethod(method)}<Either<MorphemeFailure, $entityClass>> $apiMethodName($bodyClass body,{Map<String, String>? headers, ${isApplyCacheStrategy(method) ? 'CacheStrategy? cacheStrategy,' : ''}}) async {
try {
final data = await remoteDataSource.$apiMethodName(body, headers: headers, ${isApplyCacheStrategy(method) ? 'cacheStrategy: cacheStrategy,' : ''});
return Right($entityImpl);
} on MorphemeException catch (e) {
return Left(e.toMorphemeFailure());
} catch (e) {
return Left(InternalFailure(e.toString()));
}
}''';
},
)}''';
if (!exists(join(path, '${pageName}_repository_impl.dart'))) {
join(path, '${pageName}_repository_impl.dart').write(
'''${returnData == 'body_bytes' ? "import 'dart:typed_data';" : ''}
import 'package:core/core.dart';
${isReturnDataModel ? '''import '../../domain/entities/${apiName}_entity.dart';''' : ''}
${isReturnDataModel ? '''import '../../mapper.dart';''' : ''}
import '../../domain/repositories/${pageName}_repository.dart';
import '../datasources/${pageName}_remote_data_source.dart';
import '../models/body/${apiName}_body.dart';
class ${pageName.pascalCase}RepositoryImpl implements ${pageName.pascalCase}Repository {
${pageName.pascalCase}RepositoryImpl({
required this.remoteDataSource,
});
final ${pageName.pascalCase}RemoteDataSource remoteDataSource;
$methodOfDataRepository
}''');
} else {
String data = File(join(path, '${pageName}_repository_impl.dart'))
.readAsStringSync();
final isDataDatasourceAlready =
RegExp(r'remote_data_source\.dart').hasMatch(data);
final isDomainRepositoryAlready =
RegExp(r'repository\.dart').hasMatch(data);
final isNeedMapper =
(RegExp(r'.toEntity()').hasMatch(data) || isReturnDataModel) &&
!RegExp(r'''import '../../mapper.dart';''').hasMatch(data);
final isNeedImportTypeData = returnData == 'body_bytes' &&
!RegExp(r'''import 'dart:typed_data';''').hasMatch(data);
if (isNeedImportTypeData) {
data = '''import 'dart:typed_data';
$data''';
}
data = data.replaceAll(
RegExp(r"import\s?'package:core\/core.dart';\n?\n?", multiLine: true),
'''import 'package:core/core.dart';
${isNeedMapper ? '''import '../../mapper.dart';''' : ''}
${isDataDatasourceAlready ? '' : "import '../datasources/${pageName}_remote_data_source.dart';"}
${isDomainRepositoryAlready ? '' : "import '../../domain/repositories/${pageName}_repository.dart';"}
${isReturnDataModel ? '''import '../../domain/entities/${apiName}_entity.dart';''' : ''}
import '../models/body/${apiName}_body.dart';''');
final isEmpty = RegExp(r'remoteDataSource;(\s+)?}(\s+)?}').hasMatch(data);
data =
data.replaceAll(RegExp(r'}(\s+)?}(\s+)?}'), '''${isEmpty ? '' : '}}'}
$methodOfDataRepository
}''');
join(path, '${pageName}_repository_impl.dart').write(data);
}
StatusHelper.generated(join(path, '${pageName}_repository_impl.dart'));
}