diff --git a/services/feature-flags/src/service.rs b/services/feature-flags/src/service.rs --- a/services/feature-flags/src/service.rs +++ b/services/feature-flags/src/service.rs @@ -29,13 +29,32 @@ } async fn features_handler( - _client: web::Data, - _query: web::Query, - ) -> Result { - Ok(HttpResponse::Ok().body("HELLO")) + client: web::Data, + query: web::Query, + ) -> HttpResponse { + let platform = match query.platform.as_str() { + "iOS" => Some(Platform::IOS), + "Android" => Some(Platform::ANDROID), + _ => None, + }; + match platform { + Some(p) => match Self::enabled_features_set( + client.get_ref(), + p, + query.code_version, + query.is_staff, + ) + .await + { + Ok(features) => HttpResponse::Ok() + .body(features.into_iter().collect::>().join(", ")), + _ => HttpResponse::InternalServerError().finish(), + }, + None => HttpResponse::BadRequest().finish(), + } } - async fn _enabled_features_set( + async fn enabled_features_set( db: &DatabaseClient, platform: Platform, code_version: i32, @@ -46,13 +65,13 @@ features_config .into_values() .filter_map(|config| { - Self::_check_if_feature_is_enabled(code_version, is_staff, config) + Self::check_if_feature_is_enabled(code_version, is_staff, config) }) .collect(), ) } - fn _check_if_feature_is_enabled( + fn check_if_feature_is_enabled( code_version: i32, is_staff: bool, feature_config: FeatureConfig, @@ -82,7 +101,7 @@ #[derive(Deserialize, Debug)] struct FeatureQuery { - _code_version: i32, - _is_staff: bool, - _platform: String, + code_version: i32, + is_staff: bool, + platform: String, }