From b93c67438c1f2a4bb408967975c471320c5c42e0 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Mon, 19 May 2025 14:11:33 -0400 Subject: [PATCH] collab: Require product code for `POST /billing/subscriptions` (#30968) This PR makes the `product` field required in the request body for `POST /billing/subscriptions`. We were already passing this everywhere, in practice. Release Notes: - N/A --- crates/collab/src/api/billing.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/crates/collab/src/api/billing.rs b/crates/collab/src/api/billing.rs index cb6a31aad229efb6d4424291fb99612c2be2f4bd..f1ed25ed88a2aeedaf322d5b122ca77e3547ae81 100644 --- a/crates/collab/src/api/billing.rs +++ b/crates/collab/src/api/billing.rs @@ -291,7 +291,7 @@ enum ProductCode { #[derive(Debug, Deserialize)] struct CreateBillingSubscriptionBody { github_user_id: i32, - product: Option, + product: ProductCode, } #[derive(Debug, Serialize)] @@ -383,12 +383,12 @@ async fn create_billing_subscription( ); let checkout_session_url = match body.product { - Some(ProductCode::ZedPro) => { + ProductCode::ZedPro => { stripe_billing .checkout_with_zed_pro(customer_id, &user.github_login, &success_url) .await? } - Some(ProductCode::ZedProTrial) => { + ProductCode::ZedProTrial => { if let Some(existing_billing_customer) = &existing_billing_customer { if existing_billing_customer.trial_started_at.is_some() { return Err(Error::http( @@ -409,17 +409,11 @@ async fn create_billing_subscription( ) .await? } - Some(ProductCode::ZedFree) => { + ProductCode::ZedFree => { stripe_billing .checkout_with_zed_free(customer_id, &user.github_login, &success_url) .await? } - None => { - return Err(Error::http( - StatusCode::BAD_REQUEST, - "No product selected".into(), - )); - } }; Ok(Json(CreateBillingSubscriptionResponse {