add feature flags to moderator field of get profile

This commit is contained in:
Brandon Thomas committed 2024-04-20 01:47:43 -04:00
1 parent df955d5aca
commit 818e4eae1c
2 files changed
+15

No files matched your search

@@ -52,6 +52,7 @@ pub struct UserProfileModeratorFields {
pub is_banned: bool,
pub maybe_mod_comments: Option<String>,
pub maybe_mod_user_token: Option<String>,
pub maybe_feature_flags: Option<String>,
}
struct RawUserProfileRecord {
@@ -78,6 +79,7 @@ struct RawUserProfileRecord {
// Mod fields
is_banned: i8,
maybe_feature_flags: Option<String>,
maybe_mod_comments: Option<String>,
maybe_mod_user_token: Option<String>,
}
@@ -119,6 +121,7 @@ SELECT
is_banned,
maybe_mod_comments,
maybe_mod_user_token,
maybe_feature_flags,
created_at
FROM users
WHERE
@@ -170,6 +173,7 @@ WHERE
is_banned: i8_to_bool(profile_record.is_banned),
maybe_mod_comments: profile_record.maybe_mod_comments,
maybe_mod_user_token: profile_record.maybe_mod_user_token,
maybe_feature_flags: profile_record.maybe_feature_flags,
})
};
@@ -3,6 +3,7 @@
#![forbid(unused_mut)]
#![forbid(unused_variables)]
use std::collections::BTreeSet;
use std::fmt;
use actix_web::{HttpRequest, HttpResponse, web};
@@ -17,6 +18,7 @@ use r2d2_redis::redis::Commands;
use sqlx::MySqlPool;
use utoipa::ToSchema;
use enums::by_table::users::user_feature_flag::UserFeatureFlag;
use enums::common::visibility::Visibility;
use http_server_common::request::get_request_header_optional::get_request_header_optional;
use http_server_common::response::serialize_as_json_error::serialize_as_json_error;
@@ -29,6 +31,7 @@ use tokens::tokens::users::UserToken;
use crate::common_responses::user_avatars::default_avatar_color_from_username::default_avatar_color_from_username;
use crate::common_responses::user_avatars::default_avatar_from_username::default_avatar_from_username;
use crate::common_responses::user_details_lite::UserDetailsLight;
use crate::session::lookup::user_session_feature_flags::UserSessionFeatureFlags;
use crate::session::session_checker::SessionChecker;
// TODO: This is duplicated in query_user_profile
@@ -67,6 +70,10 @@ pub struct UserProfileModeratorFields {
pub is_banned: bool,
pub maybe_mod_comments: Option<String>,
pub maybe_mod_user_token: Option<String>,
// Collection of feature / rollout flags
// NB: The BTreeSet maintains order so React doesn't introduce re-render state bugs when order changes
pub maybe_feature_flags: BTreeSet<UserFeatureFlag>,
}
#[derive(Serialize, Deserialize, Clone, ToSchema)]
@@ -273,10 +280,14 @@ pub async fn get_profile_handler(
website_url: user_data.user_profile.website_url,
created_at: user_data.user_profile.created_at,
maybe_moderator_fields: user_data.user_profile.maybe_moderator_fields.map(|mod_fields| {
let feature_flags =
UserSessionFeatureFlags::new(mod_fields.maybe_feature_flags.as_deref());
UserProfileModeratorFields {
is_banned: mod_fields.is_banned,
maybe_mod_comments: mod_fields.maybe_mod_comments,
maybe_mod_user_token: mod_fields.maybe_mod_user_token,
maybe_feature_flags: feature_flags.clone_flags(),
}
}),
badges: user_data.badges