Good changes

This commit is contained in:
Andras Schmelczer 2026-03-11 20:44:34 +00:00
parent 80a5a2a774
commit 791bc6976b
24 changed files with 890 additions and 312 deletions

View file

@ -25,6 +25,12 @@ struct InviteValidation {
used: bool,
}
#[derive(Deserialize)]
pub struct CreateInviteRequest {
/// Admins can explicitly choose "admin" or "referral". Ignored for non-admins.
invite_type: Option<String>,
}
#[derive(Deserialize)]
pub struct RedeemRequest {
code: String,
@ -66,12 +72,12 @@ fn generate_invite_code() -> String {
chars.into_iter().collect()
}
/// Create an invite. Admins create "admin" invites (free license).
/// Licensed non-admin users create "referral" invites (30% off).
/// Create an invite. Admins create "admin" invites (free license) by default,
/// but can explicitly request "referral" type. Licensed non-admin users always create "referral" invites (30% off).
pub async fn post_invites(
state: Arc<AppState>,
Extension(user): Extension<OptionalUser>,
_body: Json<serde_json::Value>,
Json(body): Json<CreateInviteRequest>,
) -> Response {
let user = match user.0 {
Some(u) => u,
@ -79,7 +85,10 @@ pub async fn post_invites(
};
let invite_type = if user.is_admin {
"admin"
match body.invite_type.as_deref() {
Some("referral") => "referral",
_ => "admin",
}
} else if user.subscription == "licensed" {
"referral"
} else {