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
This commit is contained in:
Marshall Bowers 2025-05-19 14:11:33 -04:00 committed by GitHub
parent fdec966226
commit b93c67438c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -291,7 +291,7 @@ enum ProductCode {
#[derive(Debug, Deserialize)]
struct CreateBillingSubscriptionBody {
github_user_id: i32,
product: Option<ProductCode>,
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 {