Changeset View
Changeset View
Standalone View
Standalone View
services/feature-flags/src/service.rs
use crate::config::CONFIG; | use crate::config::CONFIG; | ||||
use crate::database::{DatabaseClient, FeatureConfig, Platform}; | use crate::database::{DatabaseClient, FeatureConfig, Platform}; | ||||
use actix_web::{web, App, HttpServer}; | use actix_web::{web, App, HttpResponse, HttpServer}; | ||||
use comm_services_lib::database::Error; | use comm_services_lib::database::Error; | ||||
use serde::Deserialize; | |||||
use std::collections::HashSet; | use std::collections::HashSet; | ||||
pub struct FeatureFlagsService { | pub struct FeatureFlagsService { | ||||
_db: DatabaseClient, | db: DatabaseClient, | ||||
} | } | ||||
impl FeatureFlagsService { | impl FeatureFlagsService { | ||||
pub fn new(db_client: DatabaseClient) -> Self { | pub fn new(db_client: DatabaseClient) -> Self { | ||||
FeatureFlagsService { _db: db_client } | FeatureFlagsService { db: db_client } | ||||
} | } | ||||
pub async fn start(&self) -> std::io::Result<()> { | pub async fn start(&self) -> std::io::Result<()> { | ||||
HttpServer::new(|| { | let db_clone = self.db.clone(); | ||||
App::new().service(web::resource("/").to(|| async { "HELLO" })) | HttpServer::new(move || { | ||||
App::new() | |||||
.app_data(web::Data::new(db_clone.to_owned())) | |||||
.service( | |||||
web::resource("/features") | |||||
.route(web::get().to(Self::features_handler)), | |||||
) | |||||
}) | }) | ||||
.bind(("localhost", CONFIG.http_port))? | .bind(("localhost", CONFIG.http_port))? | ||||
.run() | .run() | ||||
.await | .await | ||||
} | } | ||||
async fn features_handler( | |||||
_client: web::Data<DatabaseClient>, | |||||
_query: web::Query<FeatureQuery>, | |||||
) -> Result<HttpResponse, actix_web::Error> { | |||||
Ok(HttpResponse::Ok().body("HELLO")) | |||||
} | |||||
async fn _enabled_features_set( | async fn _enabled_features_set( | ||||
db: &DatabaseClient, | db: &DatabaseClient, | ||||
platform: Platform, | platform: Platform, | ||||
code_version: i32, | code_version: i32, | ||||
is_staff: bool, | is_staff: bool, | ||||
) -> Result<HashSet<String>, Error> { | ) -> Result<HashSet<String>, Error> { | ||||
let features_config = db.get_features_configuration(platform).await?; | let features_config = db.get_features_configuration(platform).await?; | ||||
Ok( | Ok( | ||||
Show All 28 Lines | feature_config | ||||
if is_enabled { | if is_enabled { | ||||
Some(feature_config.name) | Some(feature_config.name) | ||||
} else { | } else { | ||||
None | None | ||||
} | } | ||||
}) | }) | ||||
} | } | ||||
} | } | ||||
#[allow(dead_code)] | |||||
#[derive(Deserialize, Debug)] | |||||
struct FeatureQuery { | |||||
code_version: i32, | |||||
is_staff: bool, | |||||
platform: String, | |||||
} |