getFeatureToggle method

Future<FeatureToggleModel> getFeatureToggle({
  1. required String version,
  2. Map<String, String>? parent,
})

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());
  }
}