getFeatureToggle method
Implementation
Future<FeatureToggleModel> getFeatureToggle({
required String version,
Map<String, String>? parent,
}) async {
if (parent is Map<String, String> && parent.isNotEmpty) {
final keys = parent.keys.toList();
if (keys.length > 1) {
throw FeatureTogglesDataServiceException(
code: RdevCode.InvalidArgument,
message: 'Parent can only have one key');
}
final key = keys.first;
final value = parent[key];
final collectionPath = key.split(RegExp(r'(?=[A-Z])'));
final parentRef =
_firestore.collection(collectionPath.join('/')).doc(value);
final parentFeatureToggleRef = parentRef.collection('FeatureToggles');
try {
final parentFeatureToggleDoc =
await parentFeatureToggleRef.doc(version).get();
if (parentFeatureToggleDoc.exists == false) {
throw FeatureTogglesDataServiceException(
code: RdevCode.NotFound,
message: 'Feature toggle with version: $version was not found');
}
final featureToggleModel =
FeatureToggleModel.fromJson(parentFeatureToggleDoc.data()!);
featureToggleModel.uid = parentFeatureToggleDoc.id;
return featureToggleModel;
} catch (err) {
log.warning('Error getting workspace feature toggle: $err');
}
}
// Use root level
final featureToggleRef = _firestore.collection('FeatureToggles');
try {
final featureToggleDoc = await featureToggleRef.doc(version).get();
if (featureToggleDoc.exists == false) {
throw FeatureTogglesDataServiceException(
code: RdevCode.NotFound,
message: 'Feature toggle with version: $version was not found');
}
final featureToggleModel =
FeatureToggleModel.fromJson(featureToggleDoc.data()!);
featureToggleModel.uid = featureToggleDoc.id;
return featureToggleModel;
} catch (err) {
if (err is FeatureTogglesDataServiceException) {
rethrow;
}
throw FeatureTogglesDataServiceException(message: err.toString());
}
}