From 7da69691a021eeb82e39de34c4c383d1d705bbfa Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Thu, 14 May 2026 01:34:52 -0400 Subject: [PATCH] document types --- .../artcraft_api_defs/src/moderation/mod.rs | 1 + .../list_global_user_referrals.rs | 47 +++++++++++++++++ .../list_user_referrals_for_user.rs | 26 ++++++++++ .../src/moderation/user_referrals/mod.rs | 2 + .../web/storyteller_web/src/docs/api_doc.rs | 14 +++++ ...ator_list_global_user_referrals_handler.rs | 52 ++----------------- ...or_list_user_referrals_for_user_handler.rs | 35 +++---------- 7 files changed, 101 insertions(+), 76 deletions(-) create mode 100644 crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/list_global_user_referrals.rs create mode 100644 crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/list_user_referrals_for_user.rs create mode 100644 crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/mod.rs diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/mod.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/mod.rs index 10ed47c7f6..62e008292f 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/mod.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/mod.rs @@ -1,5 +1,6 @@ pub mod alerts; pub mod jobs; pub mod user; +pub mod user_referrals; pub mod wallet_ledger_entries; pub mod wallets; diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/list_global_user_referrals.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/list_global_user_referrals.rs new file mode 100644 index 0000000000..10887eae8f --- /dev/null +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/list_global_user_referrals.rs @@ -0,0 +1,47 @@ +use chrono::{DateTime, Utc}; +use serde_derive::{Deserialize, Serialize}; +use tokens::tokens::user_referral_codes::UserReferralCodeToken; +use tokens::tokens::users::UserToken; +use utoipa::{IntoParams, ToSchema}; + +// --- Request --- + +#[derive(Deserialize, ToSchema, IntoParams)] +pub struct ListGlobalUserReferralsQueryParams { + pub cursor: Option, + pub limit: Option, +} + +// --- Response --- + +#[derive(Serialize, ToSchema)] +pub struct ListGlobalUserReferralsSuccessResponse { + pub success: bool, + pub referrals: Vec, + pub maybe_cursor: Option, +} + +#[derive(Serialize, ToSchema)] +pub struct UserReferralResponse { + pub invited_user: InvitedUserDetails, + pub referrer_user: ReferrerUserDetails, + pub maybe_referral_code_token: Option, + pub maybe_referral_url: Option, + pub maybe_landing_url: Option, + pub created_at: DateTime, +} + +#[derive(Serialize, ToSchema)] +pub struct InvitedUserDetails { + pub token: UserToken, + pub username: String, + pub display_name: String, + pub email_address: String, +} + +#[derive(Serialize, ToSchema)] +pub struct ReferrerUserDetails { + pub token: UserToken, + pub username: String, + pub display_name: String, +} diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/list_user_referrals_for_user.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/list_user_referrals_for_user.rs new file mode 100644 index 0000000000..d47a598584 --- /dev/null +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/list_user_referrals_for_user.rs @@ -0,0 +1,26 @@ +use serde_derive::{Deserialize, Serialize}; +use utoipa::{IntoParams, ToSchema}; + +use crate::moderation::user_referrals::list_global_user_referrals::UserReferralResponse; + +// --- Request --- + +#[derive(Deserialize, ToSchema, IntoParams)] +pub struct ListUserReferralsForUserQueryParams { + pub cursor: Option, + pub limit: Option, +} + +#[derive(Deserialize, ToSchema)] +pub struct ListUserReferralsForUserPathInfo { + pub username: String, +} + +// --- Response --- + +#[derive(Serialize, ToSchema)] +pub struct ListUserReferralsForUserSuccessResponse { + pub success: bool, + pub referrals: Vec, + pub maybe_cursor: Option, +} diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/mod.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/mod.rs new file mode 100644 index 0000000000..3401f0ba8b --- /dev/null +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/moderation/user_referrals/mod.rs @@ -0,0 +1,2 @@ +pub mod list_global_user_referrals; +pub mod list_user_referrals_for_user; diff --git a/crates/service/web/storyteller_web/src/docs/api_doc.rs b/crates/service/web/storyteller_web/src/docs/api_doc.rs index e4e3c3f0fc..eaa3370da3 100644 --- a/crates/service/web/storyteller_web/src/docs/api_doc.rs +++ b/crates/service/web/storyteller_web/src/docs/api_doc.rs @@ -93,6 +93,8 @@ use crate::http_server::endpoints::moderation::user_feature_flags::moderator_lis use crate::http_server::endpoints::moderation::user_feature_flags::moderator_list_user_feature_flags_handler::*; use crate::http_server::endpoints::moderation::staff_audit_logs::moderator_list_staff_audit_logs_handler::*; use crate::http_server::endpoints::moderation::user_bans::moderation_ban_user_handler::*; +use artcraft_api_defs::moderation::user_referrals::list_global_user_referrals::*; +use artcraft_api_defs::moderation::user_referrals::list_user_referrals_for_user::*; use crate::http_server::endpoints::moderation::user_sessions::moderator_list_user_session_impersonation_requests_for_user_handler::*; use crate::http_server::endpoints::moderation::user_sessions::moderator_list_user_session_impersonation_requests_handler::*; use crate::http_server::endpoints::moderation::user_sessions::moderator_user_session_impersonation_request_handler::*; @@ -529,6 +531,8 @@ use crate::http_server::endpoints::media_files::list::list_batch_generated_redux crate::http_server::endpoints::moderation::debug_logs::moderation_list_debug_logs_for_token_handler::moderation_list_debug_logs_for_token_handler, crate::http_server::endpoints::moderation::jobs::moderation_get_job_by_token_handler::moderation_get_job_by_token_handler, crate::http_server::endpoints::moderation::staff_audit_logs::moderator_list_staff_audit_logs_handler::moderator_list_staff_audit_logs_handler, + crate::http_server::endpoints::moderation::user_referrals::moderator_list_global_user_referrals_handler::moderator_list_global_user_referrals_handler, + crate::http_server::endpoints::moderation::user_referrals::moderator_list_user_referrals_for_user_handler::moderator_list_user_referrals_for_user_handler, crate::http_server::endpoints::moderation::user_bans::moderation_ban_user_handler::moderation_ban_user_handler, crate::http_server::endpoints::moderation::user_sessions::moderator_list_user_session_impersonation_requests_for_user_handler::moderator_list_user_session_impersonation_requests_for_user_handler, crate::http_server::endpoints::moderation::user_sessions::moderator_list_user_session_impersonation_requests_handler::moderator_list_user_session_impersonation_requests_handler, @@ -1225,6 +1229,16 @@ use crate::http_server::endpoints::media_files::list::list_batch_generated_redux ReferralCodeEntry, DeleteReferralCodePathInfo, DeleteReferralCodeResponse, + + // User Referrals (Moderation) + ListGlobalUserReferralsQueryParams, + ListGlobalUserReferralsSuccessResponse, + UserReferralResponse, + InvitedUserDetails, + ReferrerUserDetails, + ListUserReferralsForUserQueryParams, + ListUserReferralsForUserPathInfo, + ListUserReferralsForUserSuccessResponse, )) )] pub struct ApiDoc; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_global_user_referrals_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_global_user_referrals_handler.rs index 95eb5740aa..82bb8778eb 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_global_user_referrals_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_global_user_referrals_handler.rs @@ -2,15 +2,15 @@ use std::sync::Arc; use actix_web::web::{Json, Query}; use actix_web::{web, HttpRequest}; -use chrono::{DateTime, Utc}; use log::warn; -use utoipa::{IntoParams, ToSchema}; +use artcraft_api_defs::moderation::user_referrals::list_global_user_referrals::{ + InvitedUserDetails, ListGlobalUserReferralsQueryParams, + ListGlobalUserReferralsSuccessResponse, ReferrerUserDetails, UserReferralResponse, +}; use mysql_queries::queries::user_referrals::list_global_user_referrals::{ list_global_user_referrals, ListGlobalUserReferralsArgs, }; -use tokens::tokens::user_referral_codes::UserReferralCodeToken; -use tokens::tokens::users::UserToken; use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ @@ -22,50 +22,6 @@ const CURSOR_NAME: &str = "modusrref"; const DEFAULT_LIMIT: u32 = 100; const MAX_LIMIT: u32 = 1000; -// --- Request --- - -#[derive(Deserialize, ToSchema, IntoParams)] -pub struct ListGlobalUserReferralsQueryParams { - pub cursor: Option, - pub limit: Option, -} - -// --- Response --- - -#[derive(Serialize, ToSchema)] -pub struct ListGlobalUserReferralsSuccessResponse { - pub success: bool, - pub referrals: Vec, - pub maybe_cursor: Option, -} - -#[derive(Serialize, ToSchema)] -pub struct UserReferralResponse { - pub invited_user: InvitedUserDetails, - pub referrer_user: ReferrerUserDetails, - pub maybe_referral_code_token: Option, - pub maybe_referral_url: Option, - pub maybe_landing_url: Option, - pub created_at: DateTime, -} - -#[derive(Serialize, ToSchema)] -pub struct InvitedUserDetails { - pub token: UserToken, - pub username: String, - pub display_name: String, - pub email_address: String, -} - -#[derive(Serialize, ToSchema)] -pub struct ReferrerUserDetails { - pub token: UserToken, - pub username: String, - pub display_name: String, -} - -// --- Handler --- - /// List all user referrals globally. Moderators only. #[utoipa::path( get, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_user_referrals_for_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_user_referrals_for_user_handler.rs index aa2bebf3af..2d013e7464 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_user_referrals_for_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_user_referrals_for_user_handler.rs @@ -3,16 +3,19 @@ use std::sync::Arc; use actix_web::web::{Json, Path, Query}; use actix_web::{web, HttpRequest}; use log::warn; -use utoipa::{IntoParams, ToSchema}; +use artcraft_api_defs::moderation::user_referrals::list_global_user_referrals::{ + InvitedUserDetails, ReferrerUserDetails, UserReferralResponse, +}; +use artcraft_api_defs::moderation::user_referrals::list_user_referrals_for_user::{ + ListUserReferralsForUserPathInfo, ListUserReferralsForUserQueryParams, + ListUserReferralsForUserSuccessResponse, +}; use mysql_queries::queries::user_referrals::list_user_referrals_for_user::{ list_user_referrals_for_user, ListUserReferralsForUserArgs, }; use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError; -use crate::http_server::endpoints::moderation::user_referrals::moderator_list_global_user_referrals_handler::{ - InvitedUserDetails, ReferrerUserDetails, UserReferralResponse, -}; use crate::http_server::web_utils::user_session::require_moderator::{ require_moderator, UseDatabase, }; @@ -22,30 +25,6 @@ const CURSOR_NAME: &str = "modusrrefu"; const DEFAULT_LIMIT: u32 = 100; const MAX_LIMIT: u32 = 1000; -// --- Request --- - -#[derive(Deserialize, ToSchema, IntoParams)] -pub struct ListUserReferralsForUserQueryParams { - pub cursor: Option, - pub limit: Option, -} - -#[derive(Deserialize, ToSchema)] -pub struct ListUserReferralsForUserPathInfo { - pub username: String, -} - -// --- Response --- - -#[derive(Serialize, ToSchema)] -pub struct ListUserReferralsForUserSuccessResponse { - pub success: bool, - pub referrals: Vec, - pub maybe_cursor: Option, -} - -// --- Handler --- - /// List user referrals for a specific referrer user. Moderators only. #[utoipa::path( get,