getRepositoryImplTemplate method

String getRepositoryImplTemplate()

Implementation

String getRepositoryImplTemplate() {
  return '''
import '../../domain/repositories/${featureName}_repository.dart';
import '../datasources/${featureName}_remote_datasource.dart';
import '../datasources/${featureName}_local_datasource.dart';
import '../models/${featureName}_model.dart';
import '../../domain/entities/${featureName}_entity.dart';

class ${className}RepositoryImpl implements ${className}Repository {
final ${className}RemoteDataSource remoteDataSource;
final ${className}LocalDataSource localDataSource;

${className}RepositoryImpl(
  this.remoteDataSource,
  this.localDataSource,
);

@override
Future<${className}Entity> fetchData() async {
  try {
    final model = await remoteDataSource.fetchData();
    await localDataSource.cacheData(model);
    return _modelToEntity(model);
  } catch (e) {
    final cachedModel = await localDataSource.fetchCachedData();
    if (cachedModel != null) {
      return _modelToEntity(cachedModel);
    }
    rethrow;
  }
}

${className}Entity _modelToEntity(${className}Model model) {
  return ${className}Entity(
    id: model.id,
    ${useFreezed ? '''name: model.name,
    description: model.description,''' : ''}
  );
}
}
''';
}