collab: Don't create a Zed Free subscription if one already exists in Stripe (#30983)

This PR adds a check for if a Zed Free subscription already exists in
Stripe before we try to create one.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2025-05-19 20:18:45 -04:00 committed by GitHub
parent f7a0834f54
commit f73c8e5841
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -310,6 +310,32 @@ impl StripeBilling {
) -> Result<stripe::Subscription> {
let zed_free_price_id = self.zed_free_price_id().await?;
let existing_subscriptions = stripe::Subscription::list(
&self.client,
&stripe::ListSubscriptions {
customer: Some(customer_id.clone()),
status: None,
..Default::default()
},
)
.await?;
let existing_zed_free_subscription =
existing_subscriptions
.data
.into_iter()
.find(|subscription| {
subscription.status == SubscriptionStatus::Active
&& subscription.items.data.iter().any(|item| {
item.price
.as_ref()
.map_or(false, |price| price.id == zed_free_price_id)
})
});
if let Some(subscription) = existing_zed_free_subscription {
return Ok(subscription);
}
let mut params = stripe::CreateSubscription::new(customer_id);
params.items = Some(vec![stripe::CreateSubscriptionItems {
price: Some(zed_free_price_id.to_string()),