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:
parent
f7a0834f54
commit
f73c8e5841
1 changed files with 26 additions and 0 deletions
|
@ -310,6 +310,32 @@ impl StripeBilling {
|
||||||
) -> Result<stripe::Subscription> {
|
) -> Result<stripe::Subscription> {
|
||||||
let zed_free_price_id = self.zed_free_price_id().await?;
|
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);
|
let mut params = stripe::CreateSubscription::new(customer_id);
|
||||||
params.items = Some(vec![stripe::CreateSubscriptionItems {
|
params.items = Some(vec![stripe::CreateSubscriptionItems {
|
||||||
price: Some(zed_free_price_id.to_string()),
|
price: Some(zed_free_price_id.to_string()),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue